이 영역을 누르면 첫 페이지로 이동
우당탕탕 보안이야기 블로그의 첫 페이지로 이동

우당탕탕 보안이야기

페이지 맨 위로 올라가기

우당탕탕 보안이야기

- 모의 해킹 - 취약점 분석/진단 - AWS

[5] 악성코드 분석

  • 2022.01.28 20:29
  • Malicious Code/Analysis
반응형

- 2022.01.28 -


** 악성코드는 오로지 교육과 분석의 용도로만 사용하며 획득 경로, 방법에 대해서 배포 및 공유하지 않습니다. **

[Virtual Environments]
OS : Windows
Architecture : x64
Tools : IDA, SysAnalyzer, peview, pestudio

[정적분석]

peview, MZ 시그니처 확인

peview에서 파일을 열어보았다. MZ 시그니처인 5A4D를 보아 exe파일임을 확인할 수 있다.

peview, time stamp

그 다음 Time Stamp를 확인하였다. 2011년 09월 30일 마지막으로 컴파일된 파일이다.

 

pestudio

pestudio를 이용해 string 함수를 살펴보았다.

이 악성코드 파일 안에서 사용되는 함수들을 확인할 수 있다.

가장 위의 특정 링크 주소와 함수 SetWaitableTimer, SystemTimeToFileTime을 보아서 시간과 웹페이지에 접속을 시도하는 악성코드로 추측한다.

 

[동적분석]

 

SysAnalyzer는 동적분석을 할때 사용되는 툴로 파일이 실행된 직후 시스템안에서 일어나는 모든 상황을 기록하여 사용자에게 보여준다. 모든 행적을 확인할 수 있는 도구이다.

SysAnalyzer, RegMonitor

HKLM\SYSTEM\CurrentControlSet\Services 경로에 레지스트리 MalService를 등록한것을 확인할 수 있다.

 

실제 regedit(레지스트리 편집기)로 들어가 확인해보면 아래사진과 같게 등록이 되어있는것을 확인할 수 있다.

regedit, Malservice 등록

악성코드는 실행이 되면 가장 먼저 수행하는것이 바로 레지스트리 조작이다.

이유는 악성코드의 시작이 한번실행으로 끝나는것이아니라 공격자가 언제든지 접속하거나 공격을 수행할 수 있도록

공격에 대한 지속성을 보장하기 위해서이다.

따라서 해당경로에 악성코드는 MalService라는 새로운 레지스트리를 생성해서 컴퓨터가 재부팅이 되더라도 바로 프로세스가 실행되어 특정 동작을 지속하도록 하는것이다.

 

SysAnalyzer, Mutex등록

새롭게 변경된 Mutex들이다.

Mutex함수는 쉽게 설명하면 중복실행을 방지하는 것인데.

가장 대표적으로 카카오톡과 메모장을 대표로 둘 수 있다.

카카오톡을 사용하던 중 다시 카카오톡을 누른다고 해서 카카오톡이 2개가 실행되지 않는다.

그러나 메모장은 이미 열려있는 상태에서 메모장을 누르면 다시 메모장이 열리게 되는 중복으로 실행하는 상황이 발생한다.

 

따라서 위 파일은 중복실행을 막도록 1번만 실행할 수 있도록 만들어진 파일이다.

 

SysAnalyzer, PortOpen

악성코드가 어떤 포트를 열었는지 확인한다.

57756, 57757 그 밑으로 쭉 포트를 open한것을 확인했다.

 

[ 코드분석 ]

 

IDA

IDA로 악성코드를 열어 보았다. 가장 눈에 띄는건 call함수로 호출되는 StartServiceCtrlDispatcherA이다.

서비스를 시작하는 함수로 보이는데 그 밑에 다시한번 호출명 call로 호출되는게 보인다.

 

call sub_401040 이 호출은 메모리주소 0x00401040을 부르는 명령어로 아이다에서는 앞의 0x00이 생략되고

sub_라는 이름이 별도로 붙는다.

 

돌아가, StartServiceCtrlDispatcherA 이후 그 다음 불리는 콜에 따라 메모리주소 0x00401040이 메인함수로 파악된다.

 

 

Main함수

메인함수로 들어가 보니 push를 통해 오프셋이름을 할당한다. 이름은 HGL345

그리고 나서 call 명령어를 이용하여 OpenMutexA를 호출.

그 다음 jz의 조건에 따라 점프 혹은 진행한다.

호출 함수 리스트1
호출 함수 리스트2

SystemTimeToFileTime

CreateWaitableTimer

SetWaitableTimer

WaitForSingleObject

CreateThread

 

함수의 설명과 내부 설명은 각각의 접은글에서 확인할 수 있다.


[SystemTimeToFileTime]

> 시스템의 시간은 협정 세계시(UTC)를 기준 및 기반으로 한다.

   이 함수는 시스템의 시간을 파일 시간 형식으로 변환하는 함수이다.

더보기

[in] lpSystemTime

UTC에서 파일 시간 형식으로 변환할 시스템 시간을 포함하는 SYSTEMTIME 구조에 대한 포인터

 

[out] lpFileTime

변환된 시스템 시간을 수신 하기 위한 FileTime구조에 대한 포인터


[CreateWaitableTimer]

> 대기 가능한 타이머를 생성 혹은 실행하는 함수이다.

더보기

[in, optional] lpTimerAttributes

타이머 개체에 대한 보안 설명자를 지정하고 자식 프로세스가 반환된 핸들을 상속할 수 있는지 여부를 결정하는 구조에 대한 포인터

 

[in] bManualReset

이 매게변수가 TRUE이면 타이머는 수동 재설정 알림 타이머. FALSE일 경우 동기화 타이머

 

[in, optional] lpTimerName

타이머 개체의 이름입니다. 대소문자를 구분하고 NULL이면 타이머 개체는 이름 없이 생성됨.


[SetWaitableTimer]

> 지정된 대기 타이머를 활성하하고 기한이 되면 타이머에 신호를 보낸다.

더보기

[in] hTimer

타이머 개체에 대한 핸들. CreateWaitableTimer 또는 OpenWaitableTimer 함수가 이 핸들을 반환합니다.

이 핸들에는  TIMER_MODIFY_STATE 엑세스 권한이 있어야 함.

 

[in] lpDueTime

100ns 간격으로 타이머 상태가 신호로 설정되는 시간. FILETIME 구조에서 설명하는 형식을 사용해야한다.

양수값으로만 설정할 수 있고 시스템 내부적으로 UTC기반을 사용.

 

[in] lperiod

타이머 기간(밀리초)이다. lperiod가 0이 되면 타이머가 한번 신호한다.

0보다 크면 타이머는 주기적이고 주기적인 타이머는 기간이 경과할 때마다 자동으로 다시 활성화 된다.

lperiod가 0보다 작으면 함수는 실패로 돌아간다.


[WaitForSingleObject]

> 지정된 개체가 신호를 받은 상태가 되거나 시간 제한 간격이 경과할 때까지 대기한다.

더보기

[in] hHandle

개체에 대한 핸들.

대기가 아직 보류 중일 때 이 핸들이 닫히면 함수의 동작은 정의되지 않는다.

핸들에는 SYNCHRONIZE 엑세스 권한이 있어야 한다.

 

[in] dwMilliseconds

시간 초과 간격(밀리초)이다.

0이 아닌 값이 지정되면 함수는 객체가 신호를 받거나 간격이 경과할 때까지 기다린다.

만약 0이면 객체가 신호를 받지 않으면 함수는 대기상태에 들어가지 않고 즉시 반환됩니다.


[CreateThread]

> 가상 주소 공간 내에서 실행할 스레드를 생성한다.

더보기

[in, optional] lpThreadAttributes

반환된 핸들을 자식 프로세스에서 상속할 수 있는지 여부를 결정하는 구조에 대한 포인터

NULL값일 경우 핸들을 상속할 수 없다.

 

[in] dwStackSize

Stack의 초기 크기.

시스템은 이 값을 가장  가까운 페이지로 반올림한다.

이 매개변수가 0이면 새 스레드는 실행 파일의 기본 크기를 사용한다.

 

[in] lpStartAddress

스레드에서 실행할 응용 프로그램 정의 함수에 대한 포인터.

이 포인터는 스레드의 시작 주소를 나타낸다.

 

[in, optional] lpParameter

스레드에 전달할 변수에 대한 포인터

 

[in] dwCreationFlags

스레드 생성을 제어하는 플래그이다.

 

 

호출된 함수를 확인해보면 SystemTimeToFileTime은 UTC기준으로 설정된 시스템 시간을 파일의 시간 형식으로 변환하는 함수이다. 이 악성코드는 시간에 있어서 깊은 영향을 받는것 같다.

 

그 뒤로도 타이머를 만들어나 하는 함수들을 보아서 특정 시간대에 시작되는 파일인것같다.

 

IDA InternetIoenUrlA

push내용을 보아서 프록시를 우회하는 기능을 푸시하고 call명령어로 InterentOpenA함수를 호출.

이름에서 알 수 있듯. 인터넷을 실행하는 함수이다.

바로 위의 offset szAgent를 보면 Internet Explorer 8.0으로 되어있는데 인터넷 익스플로러를 실행하는 함수로 확인되고 그 바로 아래의 함수 InternetOpenUrlA를 보아 특정 url를 여는 함수이다.

 

역시나 바로 위에 어떤 사이트로 접속을 할것인지 url의 경로가 적혀있다.

그리고 이것은 본인에게 지속적으로 점프를 실행한다.

즉, 메모리주소 40116D에서 저 위 사이트로 접속을 하는데 이 메모리의 마지막에 위치한 jmp 사이트를 보면

40116D로 본인이 본인을 계속적으로 호출하는것을 볼 수 있다.

참과 거짓의 선택적인 점프가 아닌 절대 점프로 웹사이트 접속이 반복적으로 이루어지는것으로 보아

이 악성코드는 dos 공격을 하는 악성코드로 보인다.

 


마  치  며

 

평소 궁금해왔던 DOS공격의 함수들이 무엇이 있는지 궁금했다.

실제로 열어서 분석하고 확인해보니 해당 악성코드가 어떤 공격을 실행하는지

어떤 함수들을 자주 사용하는지 확인할 수 있었다.

 

따라서 함수, 작동메커니즘을 이해하는것도 필수이지만

악성코드들이 공격하는 방법, 방식에 대해서도 깊게 숙지할 필요가 있어보였다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'Malicious Code > Analysis' 카테고리의 다른 글

[6] 악성코드 분석  (0) 2022.01.31
[4] reverseMe.exe 분석  (0) 2022.01.23
[3] 악성코드 분석  (0) 2021.11.08
[2] 악성코드 분석  (0) 2021.11.08

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [6] 악성코드 분석

    [6] 악성코드 분석

    2022.01.31
  • [4] reverseMe.exe 분석

    [4] reverseMe.exe 분석

    2022.01.23
  • [3] 악성코드 분석

    [3] 악성코드 분석

    2021.11.08
  • [2] 악성코드 분석

    [2] 악성코드 분석

    2021.11.08
다른 글 더 둘러보기

정보

우당탕탕 보안이야기 블로그의 첫 페이지로 이동

우당탕탕 보안이야기

  • 우당탕탕 보안이야기의 첫 페이지로 이동

검색

메뉴

  • 홈

카테고리

  • 분류 전체보기 (66)
    • Whoami (1)
    • Malicious Code (9)
      • Analysis (5)
      • Review (4)
      • Recent Trend (0)
    • Digital Forensic (1)
    • Red Team (28)
      • Penetration Testing & CTF (13)
      • Tools (6)
      • 정보보안 (5)
      • Script (0)
      • AOS (4)
      • IOS (0)
    • Data Base (0)
    • Cloud System (3)
      • AWS (3)
    • OS (9)
      • Linux X (3)
      • Windows X (6)
    • Develope (14)
      • Dev Tools (3)
      • HTML (5)
      • CSS (4)
      • Python (1)
      • Source Code 분석 (1)
    • Synology (1)
      • NAS 서버 운영 (0)
      • NAS 서버 구축 (1)

정보

Wolfcall의 우당탕탕 보안이야기

우당탕탕 보안이야기

Wolfcall

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © Wolfcall. Designed by Fraccino.

티스토리툴바