slide-image

내일 아침까지 할 수 있을까

 malware은 malicious software로 악성코드나 악성 소프트웨어를 뜻한다. aprogram that is inserted into a system, usually covertly, with the intent of compromising the confidentiality, integrity, or availability of the victim's data, applications, or operating system or otherwise annoying or disrupting the victim.(by NIST SP 800-83)

 

malware을 분류하는 기준들은 어떻게 전파(propagte)하는지, 독립성, 복제 여부, 어떤 행동을 하는지, 무엇을 탑재하고 있는지(payload)들이 있다.

 

malware 종류, 용어 : p.207 table6.1 참고하기

 

맨 처음으로 전파 메커니즘에 의해서 분류하자면, 실행 프로그램의 감염에 의한 변조, 로컬 혹은 원격 시스템의 취약점을 이용한 공격, 사회 공학적인 방법으로 전파하는 malware로 분류할 수 있다.

 

또한 독립성에 의해서 분류하자면, 기생하는 것(virus), 그 외 시스템에서 독립적으로 동작하는 것(worm, trojan, bot..)이 있다.

 

복제 여부에 의해서 분류하면 스스로를 복제하지 않는 것(trojan, spam e-mail)과 스스로를 복제하는 것(virus, worm)이 있다. 

 

탑재물이나 행동에 의해서 분류하자면, 시스템 혹은 데이터 파일을 오염시키는 것도 있고, service를 theft해 시스템을 botnet의 일원으로 만드는 것도 있으며, keylogger나 spyware에 의해서 로그인 정보나 기타 개인 정보를 도난하는 theft of information하는 것도 있다. 마지막으로 시스템으로부터의 감지나 차단을 막기 위해 스스로의 존재를 숨기는 stealthing들도 있다.

 

사실 전문 지식 없이 malware 제작하는 것은 어려웠는데, 1990년대 부터 attack kit가 개발된 이후, 다양한 전파 메커니즘과 탑재 모듈을 지원하는 저작 도구를 이용해 malware을 제작하기 쉬워졌다. zeus crimeware toolkit, anler expoit kit등이 있는데, 악성 코드 제작이 쉬워졌다.

 

attack source, 공격 주체는 인정받고 싶은(관종) 개인으로부터, 조직 범죄 집단이나 국가 기관 등 많은 지원을 해줄 수 있는 대상으로 바뀌는 추세이다.

 

APT는 advanced persistent threat으로 malware의 새로운 종류는 아니지만, 국가 혹은 조직화된 범죄 집단이 배후에 있는 것으로 추정되는 위협이다. 특징은 well0resourced, persistent application, selected target이다. 각종 최신 침투기법을 주의 깊게 혼용하며, 장기간에 걸쳐서 지속적이고 다양한 기법으로 공격을 시도하며, 불특정 다수가 아닌 특정된 목표에 대한 공격을 하는 것을 특징으로 한다. zeroday attack이나 스턱스넷이 해당된다.

 

virus는 기존의 실행 가능한 내용물에 의존하며 기생하는 코드 조각으로 초창기의 악성 코드를 보편적으로 가리키기도 한다. 종류는 응용 프로그램, 시스템 프로그램, 스크립트 코드로 나눌 수 있는데, 사용자가 바이러스가 기생하는 프로그램을 실행하면 타 프로그램을 감염시키고 USB stick이나 네트워크 등을 통해 전파한다. 초기 개인용 데스크탑은 앞에서 했던 사용자 인증이나 접근 제어의 개념이 없고, 플로피디스크 같은 것으로 불법 SW를 복제하여서 바이러스에 대한 피해가 컸다. 

바이러스의 구조는 infection mechanism(infection vector)과 trigger(login bomb), payload로 구성 된다. infection mechanism은 전파 방식을 뜻하며, trigger은 바이러스의 탑재물을 활성화 시키는 조건이다. payload는 전파이외의 바이러스 기능을 뜻한다. 

바이러스의 상태는 dormant phase, propagaton phase, tiggering phase, execution phase로 나눌 수 있다. dormant phase는 모든 바이러스에 존재하는 것은 아니나 본격적인 활동을 시작하기에 앞서 조용힝 아무것도 안하는 잠복기 같은 상태이다. propagation phase는 스스로를 타 프로그램 혹은 시스템에 전파시키는 상태인데, 코드 그대로 안하고 mutation을 할 수도 있다. trggering phase는 본격적인 활성화가 되는 시기이고, execution phase는 공격, payload가 실행되는 시기이다.

바이러스 대응은 이후에 다시..사실 사용자에게 최소한의 권한을 부여하거나 디지털 서명(codesigning)을 하는 방법이 있다.

 

 

macro and scripting viruses는 word, excel, pdf 등 문서에 존재하는 스크립트에 기생하는 것이며 플랫폼(OS) 독립성을 가지고 일반 사용자는 프로그램보다 문서를 더 많이 취급하므로 더 널리 전파된다. 또한 시스템의 접근 제어에 영향을 받지 않고 갱신하기 쉽다는 장점이 있다.

 

melissa macro viruse

macro Document_Open
    disable Macro menu and some macro security features
    if called from a user document
    	copy macro code into Normal template file
    else
    	copy macro code into user document being opened
    end if
    if registry key "Melissa" not present
    	if Outlook is email client
        	for first 50 addresses in address book
            	send email to that address with currently infected document attached
end fro end if
		create registry key "Melissa"
    end if
    if minute in hour equals day of month
    	insert text into decument being opened
    end if
end macro

virus는 target, 스스로 숨기는 전략에 따라서 분류 할 수 있다.

virus를 target에 따라서 분류하면, boot sector infector(OS가 올라가기도 전에 infect), file infector, macro virus, multipartite virus로 나눌 수 있다.

스스로를 숨기는 전략에 의해서 분류하면, encrypted virus(랜덤키 생성하고 그걸로 암호화해 payload숨김)와 polymorphinc virus(기능은 동일한데 실행 순서나 코드 부분의 모습을 바꾸는 방식)로 나눌 수 있다.

 

worm은 바이러스와 다르게 능동적으로 시스템의 약점을 공격해서 스스로를 전파하는 악성코드이다. 일반적으로 타 코드에 기생할 필요가 없다.

worm의 전파경로로는 이메일이나 메신저를 이용해 첨부파일로 자신을 전송하거나, file sharing을 이용해 저장 매체에 의해서 autorun하거나 사용자에 의해서 실행되어 전파되는 방법이 있다. 또한 원격 실행 기능이나 원격 파일 전송 기능(FTP), 원격 로그인 기능을 통해서 전파된다.

worm의 생애 주기는 바이러스와 비슷하다. 하지만 전파 단계에서 표적을 선택해서 공격, 전파를 시도하는데 방법으로는 random, hit-list, topological, local subnet이 있다. random은 랜덤으로 IPaddress를 고르는 방법이고, hit-list는 오랜 기간에 걸쳐 수집된 잠재적 타켓 머신의 사전 목록을 공략하는 방법이다. topological은 개별 target에 담긴 정보에 의해 다른 target을 추가로 공략하는데, 예를 들어서 네트워크 토폴로지를 따라가는 방식이다. 또한 local subnet은 firewall너머로 전파된 이후는 local subnet을 공략하는 방법이다.

 

the Morris worm은 매우 초창기의 잘 알려진 worm이다. 인터넷 상의 UNIX 시스템을 공략하는데, 1988년에 Robert Morris에 의해 개발되었다고 한다.(잡혀갔나?)

이 웜은 sendmail, finger, rsh/rexec등의 알려진 약점들과, 약한 패스워드에 대한 공격을 이용하는데, 일단 target을 잡을 때 topological target discovery로 시스템 상의 각종 테이블(host table)을 이용해 전파한다.

그리고 현 호스트의 local system dictionary 패스워드 파일을 이용해 약한 패스워드와 해당 ID를 확보하는데, 계정명은 단순 변형 하는 식이고 패스워드도 엄청 약한 목록으로 432개밖에 안됨. 

그렇게 발견된 호스트에 대해서 전파를 시도하는데, 아까 말한 것 처럼 근처 host로 옮겨가서 동일 ID/PW라고 가정하고 로그인을 시도한다. 그 후에 finger protocol의 버그를 이용해 다른 원격 host에 접근하고 buffer overflow를 이용해서 로그인한다. 그 후 sendmail의 DEBUG flag의 개발 테스트 등을 위한 백도어 기능을 이용한다.

이렇게 공격을 하고 이게 성공할 시 공격당한 시스템에서 짧은 bootstrap program을 실행하여 로그오프한다. bootstrap 프로그램은 다시 부모 프로그램에 접촉해서 worm의 나머지를 내려받아 복제를 하고, 새로운 worm이 실행되고 반복하는 식이다. 사실 의도하지 않게 DoS 공격을 위한 botnet을 만들 수도 있다.

 

State of the art in worm tech를 보자면, 요새 웜들은 multiplatform되고 있다. 일반적으로 특정 시스템(windows나 linux)을 타겟으로 했지만 muliplatform으로 둘을 모두 타겟팅 하는 식으로 변화한다.

또한 multi-exploit하는데, web servers, browsers, e-mail, file sharing으로 공격 방식이 다양화 되고 있다. 그리고 ultrafast spreading......하다..

또한 기능적으로 동일하지만, 외부적으로 다른 형태의 코드로 바꾸거나 페이로드를 암호화하는 등의 polymorphic한 변화를 주며, 동작 방식이 OS에 따라서 바뀐다는 식으로 metamorphic하게 동작하기도 한다.

그리고 다양한 악성 탑재물의 전송 수단이 되는데, DDos bots이나 rootkits, spam, generator, spyware등을 전송하는 transport vehicle의 역할을 한다. 마지막으로 zero-day exploit을 하기도 한다.

 

mobile code는 script, macro, other portable instruction의 프로그램으로 can be shipped unchanged to a heterogeneous collection of platforms and executed with identical semantics하다... 쉽게 말해서 다양한 시스템에서 돌아가는 스크립트 코드이다. 바이러스, 웜, 트로이 목마의 전파 수단으로 종종 이용되며, java applet, activex, javascipt, vbscrip등을 이용한다. 크로스 사이트 스크립팅을 하거나, interactive and dynamic websites, email attachments, downloads from untrusted sites되어 실행된다...

 

mobile phone worms는 cabir worm, lasco, commwarrior가 있으며, 블루투스나 MMS를 이용해서 설치 유도를 해 전파된다. 심비안 OS 이용하는 무선전화를 공략했다고 하는데,,,,언제적 얘기?

아무튼 최근 모바일 웜은 안드나 iOS를 공략하나, mobile phone malware의 대부분은 트로이 목마 앱을 이용해 스스로를 설치한다.

 

client-side vulnerabilities 는 drive by download, watering hole attack, malvertizing, clickjacking등이 있다.

drive by download는 브라우저나 플러그인의 약점을 이용해 사용자가 웹페이지를 볼 때 사용자의 허가 없이 몰래 malware을 시스템에 설치한다. adobe flash player나 oracle java plugin를 이용하며 서버의 내용을 변조해 서버를 접속한 사용자를 공격한다. worm과는 다르게 능동성이 있지는 않다. 지가 혼자서 막 그러지는 않음...

 

watering-hole attack은 특정된 타겟이 잘 방문할 사이트를 공략해서 drive-by-download로 타겟을 공격하는 것이다. 한 웹사이트를 골라서 그 웹사이트를 접근하는 사용자를 공격하는 식이다.

 

malvertizing은 사이트를 직접 공격하는 것이 아닌 malware을 포함한 광고를 사이트에 올리는 것이다.

 

clickjacking은 User Interface를 attack하는 것이다... invisible frame을 이용해 클릭을 다른 곳으로 유도하는 식..

 

social engineering을 이용한 propagation으로 가장 유명한 것은 spam이 있다.

spam은 일방적으로 보내지는 불필요한 이메일로 monty python;s flying circus의 spam sketch에서 유래했다.

spam은 malware이긴 한데, 악성 코드라고 보기에는 무리.

인터넷 상의 이메일 중 절반 이상은 스팸이라고 하는데, 이런 트래픽을 전송하기 위한 부하와 스팸을 거르기 위한 사용자의 부담으로 인해 spam filter가 사용된다?

spam의 발송 방식으로는 도난 당한 사용자의 정보를 이용하거나, 합법적인 메일 서버에서 발송할 수 있는데, 주로, botnet에서 발송한다.

spam의 목적으로는 광고나 트로이 목마나 다른 악성코드의 운반체, phishing attack으로 쓰인다.

시스템 취약점을 이용하여 공격하는 spam도 있지만, 대부분 이메일을 읽고 첨부파일을 열어야 동작하므로 사용자 교육과 인식이 중요하다.

 

트로이 목마는 원치 않았던, 혹은 해로운 기능을 수행하는 코드가 숨겨져 있는 "쓸모 있어 보이는" 프로그램이다.. 스파이웨어가 숨겨진 보안 소프트웨어라던가...

종류로는 원 프로그램 기능과 더불어 별도로 악의적 행동을 수행하거나, 원 프로그램의 기능을 변형시켜 악의적인 행동을 수행하거나, 원 프로그램의 기능을 완전히 대체하는 프로그램으로 나눌 수 있다.

트로이 목마는 웜처럼 소프트웨어 취약점을 공략해 설치 및 실행을 사용자 동의 없이 수행하기도 하는데, 웜과는 달리 자기 복제를 하지 않는다. 

 

mobile phone trojans는 휴대전화를 공략하는 트로이목마로 대부분 app store을 통해 배포된다. 안드로이드 환경에서 많이 발견이 되고, iOS는 jailbroken phone(탈옥)이 주 대상이지만, 동일한 종류의 버그를 이용한 트로이 목마일 가능성도 있다.

 

payload는 system corruption, attck agent, information theft, stealthing으로 나눌 수 있다.

 

system corruption은 특정 조건의 만족 시 소프트웨어, 하드웨어, 데이터의 무결성을 공격하는 탑재물이다.

시스템을 망가뜨리거나 변조하는 것인데, 악의적인 데이터를 삭제하는 것으로는 chernobyl virus, Klez worm등이 있고, 공개키 암호로 사용자의 데이터를 암호화 한 후 돈을 내면 복호화 키를 건네주는 랜섬웨어로는 wannacry ransomware가 있다. 또한 real damage를 주는 것도 있는데, 예를 들어 BIOS가 담긴 eeprom을 덮어쓰려고 시도했던 것이나(^^) 스턱스넷...개인적으로 진짜 못됐다고 생각함..이란의 우라늄 농축 프로그램을 공격해 siemens industrial control software을 공격해 제어되는 장비가 정상 작동 범위를 벗어나게 만들거나, 우크라이나 전력망을 공격했던 사건 등이 있다.

 

attack agent는 감염된 시스템을 공격자 마음대로 사용하는 것인데, bot, zombie, drone등의 말들이 다 비슷한 뜻으로 사용된다. 이런 bot들이 모여서 협동 동작하면 botnet^~^

bot은 DDoS 공격을 하거나, Spamming, Sniffing traffic, Keylogging, 새로운 악성코드 배포, 광고 클리을 위한 브라우저 add-on설치, 온라인 여론조작에 사용될 수 있다.

사실 웜은 스스로 전파하고 동작하는데 비해, bot은 중앙 통제(C&C server, Remote control facility)을 받는다. 이런 C&C는 IRC, 챗방, http를 이용한 프로토콜, P2P등 분산 제어 메커니즘을 이용하며, 처음에는 고정 IP였지만, 이후 위험 분산 기법들이 등장하면서 많은 수의 DNS 이름을 생성하는 알고리즘을 이용하거나 서버 이름에 해당하는 주소를 botnet의 일원들로 자주 바꾼다. 또한 C&C 서버는 공격방식, 정보의 집결 등을 업데이트 하는데, C&C로 보내서 키로깅이나 스니핑등을 수집하는 등을 이용한다.

 

information theft는 키로깅과 스파이웨어, phishing으로 나눌 수 있다.

키로깅은 로그인 정보, 패스워드 등을 탈취해서 전송하는데, GUI에 기반한 입력으로 피할 수 있다.

스파이웨어는 보다 일반적은 모니터링 패이로드로, zeus banking trojan이 있다. 뭐..정말 모니터링해서 화면 캡처하거나 웹 화면 변조 등을 이용하거나 키로거를 이용하는 식이다. 

피싱은 적법한 웹사이트를 가장해 개인 정보의 입력을 유도하는데, spear-phishing은 불특정 다수가 아닌 타겟에 특화된 내용으로 신뢰도를 높이는 더 진화된 피싱이다. 예를 들어 나이지리아 스캠이 있다.

 

stealthing은 backdoor와 rootkt이 있는데, backdoor는 프로그래머가 디버깅이나 테스트를 위해 열어놓은 뒷문 같은 개념이지만, 실 운영시 닫아두어야 한다. 근데 종종 실수로 남겨지고, 이를 악용할 수 있다. 

rootkit은 최대한 존재를 숨긴 채 공격자에게 시스템의 관리자 권한을 비밀리에 허용하는 프로그램이다.

 

 

 

끝..................................................