세미콜론 = 그냥 코멘트
콜론 = 참조 코멘트(라벨기능..)
ps. 라벨은 함수 내부로 들어가서 처음부분에 설정한다.
ntdll.bsearch (2) | 2012.08.01 |
---|---|
Security Service Disable (0) | 2012.06.25 |
악성코드 기법 (2) | 2011.04.27 |
고급 사용자를 위한 Internet Explorer 보안 영역 레지스트리 항목 (0) | 2010.11.15 |
Bat 파일로 쓰인 명령어 (0) | 2010.05.07 |
IDA 2nd Edition 변화된 내용 (1) | 2011.08.18 |
---|---|
PDF file loader to extract and analyse (0) | 2011.07.13 |
IDA 인자 설정 (0) | 2011.04.28 |
IDA 그래프 모드에서 XREF 보기. (0) | 2010.11.05 |
IDA Unicode 디스어셈블링 (0) | 2010.08.26 |
넘어오는 파라미터 이름을 미리 지정할 수 있다.
단축키는 : Y
이후 파라미터 개수만큼 인자를 넣어 주면 된다.
ex) int a, int b
IDA 2nd Edition 변화된 내용 (1) | 2011.08.18 |
---|---|
PDF file loader to extract and analyse (0) | 2011.07.13 |
IDA 기타 단축키 (0) | 2011.05.24 |
IDA 그래프 모드에서 XREF 보기. (0) | 2010.11.05 |
IDA Unicode 디스어셈블링 (0) | 2010.08.26 |
악성코드 기법을 알아보고 역으로 악성코드를 제작해보고자 한다.
이 카테고리는 비공개로 개인 능력향상을 위해 활용한다.
Security Service Disable (0) | 2012.06.25 |
---|---|
keylogging 기법 (0) | 2011.05.24 |
고급 사용자를 위한 Internet Explorer 보안 영역 레지스트리 항목 (0) | 2010.11.15 |
Bat 파일로 쓰인 명령어 (0) | 2010.05.07 |
악성코드가 싫어하는 프로그램들 (0) | 2010.04.29 |
Active Setup이란 (0) | 2012.08.28 |
---|---|
인터넷에 관련한 레지스트리 설정 정보 (0) | 2012.07.12 |
윈7 레지스트리 정보 (0) | 2011.09.06 |
Explorer 레지스터를 활용한 악성코드 (0) | 2010.05.11 |
하지만 아내는 무엇을 느꼈는지, 부득부득 따라온다하여 어쩔수 없이 같이 가게 되었다. 그리고, 결과는 안좋은 결과 였다.
이때, 아내의 마음 동요가 매우 많이 느껴졌다. 처음에 너무 놀라 당황해 하는모습, 그리고 그 이후 나를 위해 모든 것을 내어주고 싶어하는 마음. 병을 알고 아내가 몇시간후 나에게 해준 말이 생각난다.
난 당신이 그냥 아무것도 못하더라도, 내 곁에 그냥 있을 수만 있으면 좋겠어, 약속해 줄수 있지?
그리고 이 시간 이후 매일같은 기도와, 더이상 내가 스트레스 받지 말고 살라고, 자신이 모든 부분을 책임져 줄것 처럼 모든일을 해주고 있다.
(정작 난 아무렇지 않은듯 한데, 왕이 된듯 하다. 이거 뭐라 표현해야 할지. 하지만 행복하다.)
이정도로 나를 사랑해 주는 사람이 있다는게 너무나도 행복하다는 생각이 들었다. 근데 그러한 존재는 아내 뿐이 아닌 내 주의에 가족도 그러했다. 부모님들과 처가쪽의 식구들 모두 너무나도 하나 같이 이러한 감정들을 느낄수 있었다.
난 늘 결혼이라는 것에 대하여 그리고 가족이라는 것에 대하여 그냥 오래된 관습에 의해 유지되는것 정도로 생각했었다. 하지만 이번에 그 중요한 의미를 알게 되었다.
그래서 난 기쁘다.
한국 고유의 정취를 느낄 수 있는 여행지 (0) | 2011.12.29 |
---|---|
지구를 본 뜨는 기술 (0) | 2011.09.20 |
Top Hacker Targets Include Mobile Devices and Mac (0) | 2010.12.29 |
생각의 고착 (0) | 2010.11.17 |
한국의 교육열 (0) | 2010.11.15 |
간만에 포스팅을 해본다. 3월 3일 최초 발견되어 이슈가 되었던 DDOS 악성코드를 분석해보았다.
흐름도
악성코드가 동작하는 큰 흐름은 위의 그림과 같다. 공격시간을 체크하고 도메인을 확인한 후 해당 도메인으로 공격시간에 맞추어 DDOS를 감행하는 로직이다. 7.7 DDOS와 대동소이하다고 할 수 있겠다.
특징위주로 분석을 해보자면 다음과 같다. 참고용으로 봐주면 좋겠다.
1) tlntwye.dat 파일의 로드
그림 1. tlntwye.dat의 바이너리
앞서 언급한 바와 같이 tlntwye.dat 파일은 특정 시간(이하 공격시간)이 바이너리 형태로 저장되어 있다. 이는 FPU 레지스터(실수 표현을 위해 사용되는 레지스터)에 사용되는 값으로, GetSystemTime API로 얻어진 현재 시간(국제표준시)을 SystemTimeToVariantTime API의 인자로 넣어 얻어진 값과 비교된다.
그림 2. 공격시간(tlntwye.dat의 바이너리)과 현재시간의 비교
현재시간의 년도를 2011로 고정하고 공격시간 보다 작으면 대기, 크거나 같으면 tlntwye.dat 파일을 삭제 한다. 공격시간이 담긴 파일은 이후 사용되지 않기 때문에 삭제하여 추적을 회피하려 했음을 알 수 있다.
그림 3. 공격시간까지 1분 단위 재비교
2) tljoqgv.dat 파일의 로드
공격시간이 되면 도메인 정보를 포함한 tljoqgv.dat 파일을 메모리에 로드한다. 하지만 내부 스트링을 확인하면 난독화가 되어 있어 내용을 확인 할 수 없고 일정 루틴을 따라 복호화를 진행 해야만 한다.
그림 4. dat 파일 복호화 전/후
실제 복호화가 시작되는 부분은 dat + 8 offset 부터이고 16byte씩 size 만큼 복호화 하도록 되어 있다.
그림 5. 16byte 씩 size만큼 복호화
3) IP 주소 및 개수 저장
dat가 복호화되면 도메인 list 정보를 바탕으로 DNS Query를 날려 IP 주소 및 필요한 정보를 메모리에 저장한다.
그림 6. IP 정보 저장 코드
위의 그림은 복호화된 메모리 영역에 미리 저장된 Offset 마다 필요한 정보를 저장하는 부분을 나타낸 것이다.
gethostbyname 함수를 이용하여 얻어짂 IP 개수와 값들을 저장한다.
그림 7. 일정 Offset에 IP 정보 저장
도메인이 있는 메모리 주소 + 161 offset에 반환된 IP 값들을 저장
도메인이 있는 메모리 주소 + 289 offset에 반환된 IP들의 총 개수를 저장
최초 도메인이 있는 메모리 주소의 + 302 offset 부분에 다음 도메인이 고정적으로 존재하고 그사이 특정 Offset에 공격에 필요한 정보를 저장한다.
4) 공격 Thread 생성
대부분의 DDOS 악성코드가 그렇듯 이번 악성코드도 다수의 스레드를 생성하여 대량의 패킷을 발송하도록 제작되었다. 생성되는 구조를 살펴보면 아래 그림과 같이 특정 조건대로 만들어 진다.
그림 8. Thread 생성 로직
* 도메인 확인 -> 지정된 값만큼 스레드 생성 -> 다음 도메인 확인 -> 지정된 값만큼 스레드 생성 -> (반복)
코드대로 풀어서 설명하자면, 최초 도메인이 있는 주소를 확인하고 + 298 offset 만큼 떨어짂 지점의 값을 확인한다. 해당 값은 스레드를 생성하는 값이 저장되어 있으며, 그 만큼 CreateThread 함수를 호출한다. 해당 값만큼 CreateThread를 완료하면 다음 + 302 offset 주소(다음 도메인이 있는 주소)를 따라 다시 + 298 offset 만큼 떨어짂 지점의 값 확인 후 CreateThread를 반복하게 된다.
모든 도메인에 대하여 스레드 생성을 완료하면 Sleep 함수로 5분 만큼 대기 후 다시 도메인 파일(tljoqgv.dat)을 읽어오는 루틴으로 돌아갂다. 이는 도메인 파일이 변경될 수 있음을 알 수 있다.
다음은 바이너리에서의 값이 표시된 모습과 도메인 별 지정된 값을 정리한 것이다.
그림 9. +298 offset에 지정된 값
* 지정된 스레드 개수(화살표는 2차, 없는 것은 도메인 삭제)
5) 공격 Thread 패킷 발송
스레드가 한 개의 IP에 발송하는 패킷은 UDP*1, ICMP*1, HTTP*5로 총 7개이다. IP가 20개 이면 20*7이다.
그림 10. Thread가 발송하는 패킷
생성되는 로직을 좀 더 자세히 살펴 보면 다음과 같다.
그림 11. UDP, ICMP 패킷 발송 코드
+289 offset에 저장된 IP 개수를 확인하여 해당 IP 별로 순차적으로 UDP, ICMP, HTTP 패킷을 보내도록 되어있다.
UDP와 ICMP 패킷 발송 젂에 +296, +297 값을 확인하는데, 각각의 값은 실행여부를 확인하는 플레그 값이고
모든 같은 offset의 위치에서 01로 셋팅되어, 결과적으로 항상 작동 되도록 되어 있다.
* 참고로 UDP, ICMP, HTTP 프로토콜을 만드는 API는 socket()으로, 해당 API의 파라미터 값에 따라 설정된다.
그림 12. HTTP 공격과 반복
HTTP 패킷은 좀 더 복잡한 구조로 만들어진다. 공격자는 다음과 같이 미리 스트링을 준비하고 %s로 인자를 받아서 공격 패킷을 조합한다.
첫 번째 %s는 고정적으로 “/”이다.
두 번째와 세 번째 %s는 아래 그림과 같이 몇 가지 case를 만들어 랜덤하게 들어갂다.
네 번째는 값이 없고, 다섯 번째는 도메인 스트링이다.
다음은 랜덤하게 들어가는 두 번째와 세 번째 값들에 대해 알아본 것이다.
그림 13. “User-Agent”와 “Accept”를 구성하는 로직
각각의 case string을 확인해 보면 다음과 같다.
User-Agent string |
Mozilla/5.0 (X11; U; Linux i686; ko-KR; rv:1.9.0.4) Gecko/2008111217 Fedora/3.0.4-1.fc10 Firefox/3.0.4. |
Mozilla/5.0 (Windows; U; Windows NT 5.1; ko; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8. |
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1). |
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0). |
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0). |
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; InfoPath.2). |
Accept string |
*/*. |
text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8. |
image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */*. |
image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*. |
image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-shockwave-flash, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*. |
지구를 본 뜨는 기술 (0) | 2011.09.20 |
---|---|
Windows 구조와 원리 저자, 고 정덕영님의 블로그 글 발췌 (1) | 2011.03.30 |
생각의 고착 (0) | 2010.11.17 |
한국의 교육열 (0) | 2010.11.15 |
Koobface operators earned the money over two millian dollars in a one- year period. (0) | 2010.11.15 |
Shedding New Light on Tor-Based Malware (0) | 2014.03.12 |
---|---|
ghost, gh0st 관련 정보 (1) | 2013.09.17 |
Targeted ‘phone ring flooding’ (0) | 2013.02.14 |
Red October (0) | 2013.01.16 |
Koobface 새로운 버젼입니다~ (0) | 2010.10.28 |