0. 모듈 설명

1. 간단한 사용 방법

2. 예제 코드 및 결과 사진

 

0. 모듈 설명

해당 모듈 경로 - IDA 디렉터리 \ Python 내에 idaapi.py, idautils, idc 파일 3개 존재

 

idaapi : 핵심 API에 접근(직접 임포트 해야함) - 로우 레벨 데이터에 접근할 수 있도록 지원하는 기능 예) 메모리 주소 등등

idc : idc에서 쓸 수 있는 함수 사용 - IDC 함수들을 Wrapping 한 호환 모듈을 포함 예) 명령어 불러오기 등등

idautils : 각종 유틸리티 함수를 제공 - IDA Pro에서 사용가능한 하이 레벨 유틸리티 함수들을 포함 예) 세그먼트 주소 등등

 

1. 간단한 사용 방법

모듈 사용 방법

from idc import *
from idautils import *
from idaapi import *

 

예시 코드 및 결과

ea = here()
print ("0x%x" % (ea))

 

 

2. 간단한 예제 코드 및 결과 사진

악성코드 실행파일 가져온 참조 사이트

https://app.any.run/

 

Interactive Online Malware Analysis Sandbox - ANY.RUN

Cloud-based malware analysis service. Take your information security to the next level. Analyze suspicious and malicious activities using our innovative tools.

app.any.run

다음 사진은 idautils 예제 결과 입니다.

 

다음 사진은 실제 악성코드를 가지고 idaapi를 사용한 간단한 예제입니다.

다음 사진도 실제 악성코드 샘플에서 0x0040CFDA에 존재하는 jmp _CorExeMain 명령어를 가져오는 것을 보여줍니다.

 

마지막으로 해당 파일의 해시 값을 가져오는 스크립트 예제입니다.

 

 

1. unallocated space란? + 작성 이유

한글로 번역하자면 할당되지 않은 공간 즉 사용하지 않는 공간이라는 뜻입니다. 이는 윈도우에서 볼 수 있는데 그 예시는 다음과 같습니다.

 

 

할당 되지 않은 공간 존재
할당되지 않은 공간 존재

위 사진들 처럼 할당 되지 않은 공간이 있습니다. 그런데 이게 포렌식이랑 무슨 연관이 있는지 궁금했고 이게 어떻게 동작하는지 정확한 원리를 알고 싶어서 찾아보았습니다.

 

 

2. 할당, 비할당 공간 - (여기서는 할당되지 않는 공간을 비할당 공간이라고 하겠습니다.)

윈도우 운영체제에서 내가 특정 공간에 파일을 작성하면 해당 부분은 할당된 공간이 됩니다. 그렇다면 할당되었다는 표시를 구분할 수 있는 규칙이 필요한데 파일 시스템은 1과 0으로 라벨링 함으로 구분을 짓습니다.

 

"1"일 경우에는 파일을 저장하는데 사용된다는 것을 의미합니다. 한마디로 해당 공간에 정보를 저장한다 라는 의미입니다.

"0"일 경우에는 파일이 삭제 되면 발생하는데 삭제를 할 때 0으로 라벨링을 하게 됨으로써 비할당 영역을 나타내는 것입니다.

 

중요한 것은 파일이 삭제 되었을 때를 주목해야하는데 0으로 라벨링이 되었다고 해도 해당 데이터가 완전 사라진 것이 아닙니다. 이는 데이터를 덮어쓰기를 하지 않는 이상 파일을 언제든지 복구할 수 있다는 뜻이 됩니다.

 

예를 들어보겠습니다.

.PDF 파일(대략 12GB), .DOC 파일(5GB)이 존재하는데 이를 내 SSD(512GB)에 저장을 하였습니다. 그리고 PDF파일이 필요가 없어져 삭제를 하였습니다.

그렇다면 할당영역은 본래 17GB였고 비할당 영역은 495GB이 됩니다. 이후 PDF를 삭제를 하였기 때문에 507GB가 비할당 영역 5GB가 할당 영역이 됩니다.

여기서 .PDF는 0으로 라벨링이 되었고, .DOC파일은 아직 할당되어있는 상태라고 볼 수 있습니다. 

.PDF는 unallocated space 에 존재하는데 이 공간에 다른 파일이 들어와 덮어쓰기가 된다면 파일을 복구할 수 없게 됩니다. 하지만 덮어쓰기 하기 이전에는 복구할 수 있습니다.

그 예는 다음 사진과 같습니다.

unallocated space 공간 내

02067 파일은 삭제 된 파일이지만 FTK imager로 확인해 본 결과 PDF파일임을 확인해볼 수 있습니다. 이는 export로 복구가 가능하다는 이야기가 됩니다.

 

3. 단계별 예) - 0과 1 라벨링에 대해서 단계별로 자세히 설명하겠습니다.

 

1. 초기 상태

0000000000000000000000000.....으로 아무 데이터도 저장 안되어있는 0으로 라벨링이 다 되어있습니다.

 

2. 파일 저장

2개의 파일을 저장하면 해당 파일이 저장되는 공간에 1로 라벨링이 됩니다.

111001110000000000000000000......... 이라고 가정하겠습니다.(첫번째가 PDF, 두번째가 DOC)

 

3. 파일 삭제 - (PDF 복구 가능)

00000111000000000000000000..........으로 원래 라벨링 0으로 돌아가게 됩니다.

 

4. 새 파일 추가 - (PDF 복구 불가능)

110001110000000000000000000........이렇게 000자리에 덮어쓰기가 되면 복구가 불가능합니다.

 

 

4. 마무리 - 내 생각

윈도우 파일 시스템 구조는 전체적인 큰 틀에서 벗어나지 않는다는 점에서 안좋을 수도 있겠지만 개인적으론 좋다고 생각합니다.

 

이와 관련된 궁금한 것들을 찾아보는 과정 속에 문득 공부를 할 때마다 제대로 된 정리 문서가 영어로 되어있기 때문에 이를 번역해서 이해하고 찾아나가는 과정이 번거롭고 시간이 걸린다는 생각이 들었습니다. 

앞으로 이러한 분야, 해당 부분들을 한글로 번역 및 딱 요점만 정리해서 빠르게 이해하기 위해 작성해 나갈 것입니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

참조 : 

https://www.thomsonreuters.com/en-us/posts/legal/understanding-e-discovery/

 

Understanding Deleted Files, Unallocated Space, and Their Impact on E-Discovery

A lawyer’s technical understanding of how digital information is stored makes a difference in the context of e-discovery and how he best serves his clients.

www.thomsonreuters.com

https://threat.media/definition/what-is-unallocated-space/

 

What Is Unallocated Space? — Definition by ThreatDotMedia

Unallocated space refers to the portion of a hard drive that people can use to save new files. Learn more about it in this definition.

threat.media

https://whereismydata.wordpress.com/2008/10/03/what-is-unallocated-space/

 

What is unallocated space?

What is unallocated space? Unallocated space, sometimes called “free space”, is logical space on a hard drive that the operating system, e.g Windows, can write to. To put it another way it is the o…

whereismydata.wordpress.com

 

IDA Python으로 악성코드 분석을 할 때 자동화 할 수 있도록 도와주는 굉장히 유용한 플러그인이기 때문에 해당 플러그인을 설치하는 방법에 대해 정리해보았습니다.

 

IDA Python7.6 플러그인 설치

https://lca.xlog.app/ida-ru-he-an-zhuang-cha-jian

 

How to install plugins in Ida - lca

This repository has many excellent IDA plugins. Taking the GitHub - eset/ipyida: IPython console integration for IDA Pro plugin as an…

lca.xlog.app

위 사이트를 참조 하였고 영어로 되어 있지만 정말 잘 정리 되어 있어서 가져와보았습니다.

 

 

1. Python3.9 설치, pip, Git 환경 구성

1.1 Python3.9

https://www.python.org/downloads/release/python-390/

 

Python Release Python 3.9.0

The official home of the Python Programming Language

www.python.org

위 사이트에서 자신의 아키텍처 32,64에 맞추어 설치 후 시스템 환경 변수에 등록하기

1.2 Git

https://git-scm.com/download/win

 

Git - Downloading Package

Download for Windows Click here to download the latest (2.45.0) 32-bit version of Git for Windows. This is the most recent maintained build. It was released 7 days ago, on 2024-04-29. Other Git for Windows downloads Standalone Installer 32-bit Git for Wind

git-scm.com

위 사이트에서 git 설치 후 시스템 환경 변수에 등록

 

1.3 python 3.9.0 apply

위 1.1, 1.2 과정을 다 마친 환경 상태에서 진행해주시면 됩니다.

이제 자신의 IDA Pro 7.6 버전 파일에 가서 idapyswitch.exe 를 실행 해주고 enter를 누르면 3.9.0버전이 적용이 될 것입니다.

위 사진처럼 되었으면 잘 진행이 되었습니다.

 

1.4 ipyida 모듈 pip로 설치

pip install ipyida

위 코드를 IDA 7.6 폴더에서 입력해주면 디렉터리가 생성되는데 다음 사진과 같은 경로로 들어가서 ipyida_plugin_stub.py를

만일 설치가 안된다면

git clone https://github.com/eset/ipyida.git
cd ipyida

하고

 

2. Plugins 추가

ipyida 디렉토리 내에 있는 ipyida_plugin_stub.py 파일을 IDA 디렉터리 안에 있는 plugins 디렉토리로 복사 해주면 됩니다.

windows 에서는 copy로 linux 에서는 cp로 해도 되고 GUI 환경이면 직접 복사 해서 옮겨도 됩니다.

 

3. 끝

이제 직접 설정이 되었는지 IDA 재시작 해주시면 확인이 가능합니다.

파이썬 test
script command 체크

 

4. 마지막으로 IDA Python 모듈 확인 및  사용 예제 사이트를 가져와보았습니다.

 

IDA python 모듈 모음

https://hex-rays.com//products/ida/support/idapython_docs/

 

https://hex-rays.com//products/ida/support/idapython_docs/

 

hex-rays.com

 

IDA python 사용 예제

https://www.openrce.org/articles/full_view/11

 

OpenRCE

Friday, June 24 2005 10:07.18 CDT Python is a powerful scripting language which has features greatly appreciated by its followers. Versatility, speed of development and readability are among the top ones. IDA provides the advanced user with IDC, a C-like s

www.openrce.org

 

0. 준비 

준비물 :

실습 도구 - volatility 2.6.exe, Sysinternal suite

분석 파일 - cridex

 

다음은 메모리 포렌식 도구 volatility 2.6 win64 exe 입니다.

https://sourceforge.net/projects/forensiczone/files/PTFinder2018/volatility_2.6_win64_standalone.exe/download

 

다음은 스트링 값 추출을 위해 Sysinternal suite 설치 사이트입니다.

https://learn.microsoft.com/en-us/sysinternals/downloads/sysinternals-suite

 

Sysinternals Suite - Sysinternals

The Windows Sysinternals troubleshooting Utilities have been rolled up into a single suite of tools.

learn.microsoft.com

다음은 분석할 파일입니다.

https://github.com/volatilityfoundation/volatility/wiki/Memory-Samples

 

Memory Samples

An advanced memory forensics framework. Contribute to volatilityfoundation/volatility development by creating an account on GitHub.

github.com

strings 쓸때에는 반드시 strings 먼저 한번 입력해서 동의(agree) 해주어야 제대로 사용할 수 있다.. 이렇게 간단한 것 때문에 시간 뺏기지 말자 나처럼

 

작업하려는 폴더에서 간단하게 작업을 하기 위해 다음과 같이 volatility 를 시스템 환경 변수 설정을 해주면 좋습니다.

가상 환경에서 시스템 환경 변수 설정

 

 

 

기본적인 volatility 2.6 기본 명령어 및 사용법은 다음과 같습니다.

 

정석? 분석 순서

1. imageinfo 로 먼저 환경을 확인한다. -> --profile=환경

2. pstree, psscan, pslist, psxview 로 프로세스 정보 확인

3. cmdline, cmdscan, consoles로 커맨드 입력 확인

4. connections, netscan으로 네트워크 확인

5. filescan, dumfiles 로 오프셋값 찾아서 해당 파일 덤프

6. memdump, procdump 로 메모리 덤프와 프록 덤프로 해당 영역의 의미있는 값 추출, 파일 덤프

위와 같은 순서로 진행하겠다.

 

1. 시작

1.1우선 다음 사진과 같이 해당 메모리의 운영체제(환경)을 알기 위해 imageinfo 를 사용한다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem imageinfo

 

WinXPSP2x86, WinXPSP3x86이라는 것을 알아내었다. 이 두가지 중 WinXPSP2x86을 사용하겠다.

사용 방법은 간단하다 --profile=WinXPSP2x86을 해주고 그 뒤에 명령어를 입력하면 된다.

 

1.2이제 ps 프로세스 정보를 확인해볼 차례이다.

다음과 같이 명령어를 입력해서 프로세스 정보들을 확인해 볼 수 있다. 지금은 간단하게 나와 한번에 볼 수 있지만 여러 정보들을 보고 취합 및 정리 해보려면 커맨드 창에서 보기에는 무리가 있다

 

위처럼 커맨드 창에서 그냥 봐도 되지만 효율적으로 리다이렉션 > 을 이용해 해당 명령어를 입력한 정보들을 .log 파일에 옮겨줄 것이다.

다음과 같이 입력할 수 있다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 psscan > psscan.log

필자는 notepad++를 사용하여 다음과 같이 확인해볼 수 있었다.

다른 명령어를 써보기 전에 해당 로그에 올라와있는 파일들이 얼마 되지 않음으로 해당 파일들 먼저 분석해보겠다.

 

- svchost.exe : 윈도우 NT 계열의 운영체제에서 서비스를 관할하기 위한 프로세스의 이름이며 관련 이미지이다.

- lsass.exe : 로컬 보안 기관 하위 시스템 서비스에서 사용하는 프로세스로 보안 정책을 강화를 위한 윈도우즈 프로세스이다.

- services.exe : 서비스 제어 관리자로 윈도우 서비스 프로세스와 시작과 정지 및 상호작용하는 특별한 시스템 프로세스이다.

- reader_sl.exe : 어도비 아크로뱃 스피드 런처 유형의 파일로 PDF뷰어 Adobe Reader의 빠른실행을 도와주는 프로그램이다.

- spoolsv.exe : 윈도 xp에서 인쇄와 관련된 일을 함 즉 프린트 스풀러 서비스를 위한 프로세스이다.(간단히 프린터 관련 프로세스)

- wuauclt.exe : 윈도우 업데이트를 확인, 업데이트를 다운로드 하고 설치하는 서비스이다.

- alg.exe : 윈도우 OS의 구성요소로 타사 방화벽, 인터넷 연결 공유를 사용하는 경우 필요합니다.(보안과 관련된 프로세스)

- explorer.exe : 파일 탐색기로 윈도우 환경에서 쉽게 볼 수 있는 GUI 셸이다.

- winlogon.exe : 윈도우 로그인 관리자로 로그인시 프로필 로드, 컴퓨터를 잠그는 역할을 하는 프로세스이다.

- csrss.exe : 클라이언트/서버 런타임 하위 시스템으로 통신을 담당하는 프로세스이다.

- smss.exe : 세션 관리자 하위 시스템으로 컴퓨터 세션에 관할하는 프로세스이다.

- System : 말그대로 시스템이다.

 

여기에서 의심스러운 것은 PDF를 이용한 악성코드일 수도 있는 reader_sl 파일이다. 일단 멀쩡한 프로세스일 수도 있으니 의심정도만 한다.

 

psscan.log에서 나타난 오프셋은 프로그램 시작 위치이고 Name은 해당 프로세스 이름을 나타낸다.

PID, PPID는 자식, 부모 프로세스를 뜻하는데 말 그대로 부모가 자식 프로세스를 낳는다고 표현하면 부모가 자식프로세스를 만든다라고 대충 이해하면 된다.

Time은 만들어진 시간 즉 해당 프로세스가 올라온 시각을 뜻한다. 시각별로 나타나있다.

 

이제 다른 psscan을 제외한 나머지 프로세스 명령어는 pstree, pslist, psxview임으로 한번에 입력하여 정보를 가져오겠다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 pslist > pslist.log
volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 pstree > pstree.log
volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 psxview > psxview.log

각각 살펴보길 권장한다.

pslist는 프로세스를 시각을 기준으로 볼 수 있고

pstree는 트리 형태로 볼 수 있고

psxview는 숨겨진 프로세스와 pslist, psscan에 True인지 False인지 확인해볼 수 있다.

 

 

 

1.3 커맨드 입력

이제 cmdline, cmdscan, consoles를 확인해볼 차례이다.

다음과 같이 한번에 입력한 후 확인해본 결과이다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 cmdline > cmdline.log
volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 cmdscan > cmdscan.log
volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 consoles > consoles.log

위 결과 cmdline을 제외한 나머지는 내용물이 아무것도 없었다.

그런데 이 부분에서는 딱히 의미있는 정보를 찾기는 잘 모르겠다. 그래서 다음으로 넘어간다.

 

1.4 네트워크 확인

이제 어떠한 네트워크 통신이 있었는지 확인해볼 것이다.

connections, netscan을 이용해서 찾아본다. 그런데 XP에서는 netscan이 지원하지 않는 모양이다.. 어쩔 수 없이 connections로 확인해본다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 connections > connections.log

다음 사진으로 결과가 나왔는데 누가 봐도 이게 너무 수상하게 한 개만 통신(Local <-> Remote)이 되고 있고 PID또한 확인해볼 수 있었다.

위에서 보았던 프로세스 정보를 토대로 1484가 뭔지 찾아보면 파일탐색기로 이걸로 연게 reader_sl.exe 인것을 알 수 있었다.

그렇다면 의심스러워 했던 해당 파일을 제대로 확인해볼 때가 되었다.

reader_sl의 PID 는 1640이다.

 

1.5 reader_sl 오프셋 값 찾기

filescan, dumfiles로 reader_sl 의 정확한 오프셋 값을 알아보겠다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 filescan > filescan.log

이렇게 다음 사진처럼 reader_sl 을 ctrl + f 로 해당 문자열을 찾았고 해당 위치의 정확한 offset 값인 0x00000000023ccf90을 알아내었다.

 

이제 reader_sl파일을 덤프해서 바이러스 토탈에서 바이러스인지 한번 판단해보자

 

1.6 reader_sl 파일 바이러스 체크

다음과 같이 dumpfiles로 -Q 옵션을 주고 offset값 그리고 -D 옵션 주고 files 디렉터리에(내가 추가로 만듬) -n 옵션을 주겠다라는 뜻이다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 dumpfiles -Q 0x00000000023ccf90 -D .\files\ -n

 

이제 다음과 같이 두가지 파일 .img, .dat 파일이 존재하는데 둘다 똑같으니까 그냥 아무거나 바이러스 토탈에다가 넣어주도록 하겠다.

 

위 사진처럼 떴는데 이정도면 바이러스일만 하다고 추측이 가능하다. 하지만 더 확실하게 검증해주기 위해서 메모리 덤프도 진행해주고 최종적으로 확인해보도록 하겠다.

 

1.7 메모리 덤프 악성코드 파일 확인

memdump로 덤프 확인을 다음과 같이 진행하였다

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 memdump -p 1640 -D .\dumps\

dumps는 내가 따로 디렉터리를 만들어 해당 공간에 저장해서 따로 볼려고 만든 것이다.

그냥 메모리 덤프한 것을 보면 쓰레기값이 상당하기에 strings를 이용해 문자열을 가져올 것이다.

 

다음과 같이 입력한다.

strings .\dumps\1640.dmp > strings_1640.log

시간이 꽤 걸릴 것이다. 만약 여기서 그냥 바로 나온다면 잘 안된 것이다. 바로 나올 때 해결 방법은 커맨드 입력을 strings 한번 입력해준다

strings

 

이후 어떤 창이 뜨는데 무슨 규칙? 법? 뭔지 모르겠지만 일단 agree해준다 그래야 정상 작동된다.

 

이제 확인해보니 이전에 확인해보았던 네트워크 통신에 있는 IP를 검색해주었더니 IP 흔적이 남아있었다.

또 다음과 같이 살펴보니 bank관련된 문자열이 굉장히 많이 있는 것으로 보아 bank관련된 악성파일인 것을 추측해볼 수 있었다.

 

1.8 진짜 바이러스 토탈 확인

이제 진짜 악성파일일 것 같기에 procdump로 확인해본다 다음과 같이 입력해준다.

volatility_2.6_win64_standalone.exe -f .\cridex.vmem --profile=WinXPSP2x86 procdump -p
1640 -D .\dumps\

해당 파일을 바이러스 토탈에 올려보니 다음과 같은 결과가 나왔다.

이건 이제 바이러스가 확실하다. 이는 확실한 증거임으로

악성파일임이 증명이 되었다.

 

 

0 개요 :

FBICISA는 사이버 보안 권고(CSA)를 통해 Androxgh0st 악성코드를 배포하는 위협 행위자들과 관련된 알려진 침해 지표(IOCs)와 전술 기법 및 절차(TTPs)를 전파합니다. 다양한 신뢰할 수 있는 제 3자 보고를 통해 이러한 IOCTTP가 수집되었으며, 이는 Androxgh0st 악성코드가 취약한 네트워크를 식별하고 침해할 수 있는 봇넷을 구축할 수 있음을 보여줍니다.

 

1. Androxgh0st 악성코드 :

Androxgh0st 악성코드는 파이썬으로 작성되었는데 이는 봇넷(T1583.005)를 통해 표적 네트워크에서 피해자를 식별하고 착취합니다.

.env파일을 타겟으로 잡고 민감한 정보(AWS, Microsoft Office 365 )을 포함하는 .env 파일을 대상으로 작동합니다.

PHPUnit을 통해 웹사이트에서 PHP코드를 원격으로 실행할 수 있게 하는 CVE-2017-9841 취약점을 악용하는 것으로 관찰되었습니다. PHPUnit 모듈을 사용하는 웹사이트(/vendor 폴더가 존재해야함) /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php Uniform Resource Identifier (URI) 악의적인 HTTP POST 요청을 받게 됩니다.

PHP 페이지는 POST 요청을 통해 제출된 PHP코드를 실행하며, 이 위협 행위자는 웹사이트에서 코드를 원격으로 실행할 수 있습니다.

 

 

2. Androxgh0st 악성코드의 타겟

- PHPUnit 모듈의 CVE-2017-9841 취약점을 이용해 원격 실행

- 라라벨(Laravel) 프레임워크를 타겟으로 잡아서 .env파일이 노출되었는지 여부 확인 및 추가 서비스 접근하기 위한 자격 증명이 포함되어 있는지 확인

- Apache 웹 서버 타겟을 잡는데 CVE-2021-41773과 관련하여, Apache HTTP서버 버전이 2.4.49, 2.4.50을 실행하는 취약한 웹서버를 스캔합니다.

위 타겟 들 방법을 사용해서 어떤 서비스의 자격 증명을 획득한 경우, 예로 위협 행위자들이 취약한 웹 사이트에서 AWS 자격 증명을 성공적으로 식별하고 침해하는 경우, 새로운 사용자 및 사용자 정책을 만드는 시도가 관찰되었습니다. 또 추가 스캔을 위해 새로운 AWS 인스턴스를 만드는 것이 관찰되었습니다.

 

 

3. 침해 지표(IOC)

                  다음 URI로의 수신 GET POST 요청:

                  /vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

                  /.env

                  다음 문자열을 포함하는 수신 POST 요청:

                  [0x%5B%5D=androxgh0st]

                  ImmutableMultiDict([('0x[]', 'androxgh0st')])

위에 나열된 POST 요청 문자열에서 androxgh0st라는 이름은 다른 명칭으로 대체되어 사용된 것으로 관찰되었습니다. 해당 이름 대신해 사용된 이름들이 Ridho, Aws, 0x_0x, x_X, nopebee7 등이 있습니다.

이 외에도 위협 행위자들이 사용하는 많은 추가 URL도 모았습니다.

/info

/phpinfo

/phpinfo.php

/?phpinfo=1

/frontend_dev.php/$

/_profiler/phpinfo

/debug/default/view?panel=config

등등

웹 쉘 드롭을 위한 대상 URL도 많이 모았습니다.

/.env/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

//api/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

//backup/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

//blog/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php

등등

 

(허니팟)오픈 프록시를 통한 자격 증명 유출 시도 예 :

POST /.aws/credentials HTTP/1.1

host: www.example.com

user-agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.129 Safari/537.36

accept-encoding: gzip, deflate

accept: */*

connection: keep-alive

content-length: 20

content-type: application/x-www-form-urlencoded

0x%5B%5D=androxgh0st

 

(허니팟) 오픈 프록시를 통해 시도된 웹 쉘 드롭의 예 :

GET http://www.example.com/lib/vendor/phpunit/phpunit/src/Util/PHP/eval-stdin.php HTTP/1.1

host: www.example.com

user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,

like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76

accept-encoding: gzip, deflate

accept: */*

connection: keep-alive

x-forwarded-for: 200.172.238.135

content-length: 279

 

4. 대응

- 모든 운영체제, 소프트웨어 펌웨어를 최신 상태로 유지, 특히 아파치 서버가 2.4.49, 2.4.50을 실행하고 있는지 확인하기

- 모든 URL 기본 구성이 엑세스 가능해야 하는 특별한 요구가 없는 한 모든 요청을 거부 하는 것인지 확인하기

- 라라벨 프레임워크가 디버그, 테스트 모드에 있지 않은지, .env를 제거 하고 취소하기

- /vendor/phpunit/phpunit/src/Util/PHP파일에서 인식할 수 없는 PHP파일이 있는지 검색

- .php파일을 호스팅 사이로 나가는 GET요청으로 검토하기

 

 

 

 

 

 

참고 :

https://www.cisa.gov/news-events/cybersecurity-advisories/aa24-016a

 

1. 공식 사이트

https://www.raspberrypi.com/

 

2. 위키독스 - 라즈베리파이 시작 부터 끝까지 다룸

https://wikidocs.net/book/483

 

라즈베리 파이 문서(2021.7 이전)

라즈베리 파이(Raspberry Pi) 재단과 커뮤니티의 참여자가 함께 작성한 라즈베리 파이 공식 문서를 *개인적으로 번역*한 것입니다. **([개편](https://www…

wikidocs.net

3. 라즈베리파이 관련 카페 - 질의 가능

https://cafe.naver.com/pipc

 

PIPC, 싱글보드컴퓨터 커뮤니티 : 네이버 카페

최고의 라즈베리파이 및 싱글 보드 컴퓨터 커뮤니티입니다.

cafe.naver.com

4. 라즈베리파이 모임? - 질의 가능

https://www.clien.net/service/board/cm_rasp

 

클리앙 : 라즈베리파이당

라즈베리파이를 사용하는 사람들의 모임입니다! 차단글 : 0건 내가본글

www.clien.net

5. 라즈베리파이 카메라 관련

https://neosarchizo.gitbooks.io/raspberrypiforsejonguniv/content/chapter5.html

 

파이썬 서버와 파이 카메라 연동 · 세종대 라즈베리 파이 교육

 

neosarchizo.gitbooks.io

 

 

------------------------------------------------------------- 구매 사이트(한국 기준)

1. 아이씨뱅큐

https://www.icbanq.com/A05_templete/templeteList.do?t_idx=11

 

의 모든 것 - 전자부품쇼핑몰 아이씨뱅큐

- 모든 관련 전자부품 판매, 국내 최대 전자부품 쇼핑몰, 아이씨뱅큐

www.icbanq.com

2. 엘레파츠

https://www.eleparts.co.kr/goods/view?no=8195636

 

라즈베리파이4 4GB (Raspberry Pi 4 Model B)

더욱 빠르고 강력해진 라즈베리파이 4!4GB RAM / 4K 듀얼 디스플레이 / 기가비트 이더넷 / 블루투스 5.0 / USB 3.0포트사은품: 전용 방열판 세트 증정

www.eleparts.co.kr

3. 레오콤

https://www.leocom.kr/RaspberryPi/

 

라즈베리파이 | Raspberry Pi - 공식대리점(AR) - (주)레오콤

라즈베리파이는 영국의 라즈베리파이사에서 만든 초소형/초저가의 컴퓨터로 신용카드 크기의 가성비가 뛰어난 메인보드입니다. 라즈베리파이5 출시

www.leocom.kr

4. 판다파츠

https://pandaparts.co.kr/

 

판다파츠 - 전자부품 온라인 구매 플랫폼

전자부품 쇼핑몰, 전자부품 이커머스, 글로벌 유통사 최대 제휴, 자동 견적, 정품 판매, 실시간 가격비교, 실재고, 전자부품 대리점, 항공특송

pandaparts.co.kr

 

플러터로 개발하다 보면 여러 라이브러리를 사용하게 됩니다.

나중에 생각이 안나도 다시 찾아볼 수 있도록 간단하게 정리 해보았습니다.

 

다음 항목들은 

pub.dev 에서 확인이 가능합니다. https://pub.dev/

 

1. flutter_native_splash - 앱 실행 시 나타나는 스플래시 스크린을 쉽게 구현

2. firebase_core, auth, database, storage, messaging, cloud 등 파이어베이스 서비스를 플러터 앱에 구현 가능

3. flutter_local_notifications - 로컬 푸시 알림 구현

4. flutter_naver_map - 네이버 지도를 플러터 앱에서 구현

5. flutter_location-search - 장소 검색 기능 구현

6. font_awesome_flutter - Font Awesome 아이콘을 플러터 앱에서 사용

7. shared_preferences - 간단한 데이터를 로컬에 저장하고 불러오기

8. uuid - 고유한 식별자(UUID) 생성

9. intl - 국제화 및 지역화 지원

10. location - 디바이스의 위치 정보 가져오기

11. http - HTTP 요청 보내고 받기

12. permission_handler - 앱에서 필요한 권한 요청 및 관리

13. geolocator - 디바이스의 현재 위치 가져오기 및 위치 관련 기능

14. vibration - 디바이스의 진동 기능 제어(아이폰은 제어가 안됌. 무조건 쎈 진동만 가능)

15. dash_chat_2, flutter_chat_ui - 채팅 UI 쉽게 구현 가능 - 채팅 인터페이스 구성

16. kpostal - 대한민국 우편번호 검색 기능 제공

17. flutter_inappwebview - 앱 내에서 웹 뷰 사용

18. paginated_search_bar - 페이지네이션과 검색 기능을 갖춘 검색바 위젯 제공

19. google_fonts - 구글 폰트를 플러터 앱에서 사용가능

20. fluttertoast - 토스트 메시지 쉽게 표시

21. icons_launcher - 앱 아이콘 쉽게 생성 및 관리 가능

22. url_launcher - URL 열기 및 외부 앱으로 연결 기능

23. material_design_icons_flutter - 머터리얼 디자인 아이콘을 플러터 앱에서 사용 가능

24. cupertino_icons - IOS 스타일의 쿠퍼티노 아이콘을 플러터 앱에서 사용 가능

25. shake - 디바이스 흔들림 감지

26. google_sign_in - 구글 로그인을 플러터 앱에 통합

27. connectivity_plus - 디바이스 네트워크 연결 상태 확인

28. flutter_bloc - 상태 관리를 할 수 있는 라이브러리(중요도 별 다섯개)

 

 

여기까지 입니다.

 

목차 

1. LLVM IR 악성코드 탐지 모델 제안

2. 핵심 아이디어

3. 방법

4. 결과

5. 결론

 

 

1. LLVM IR 악성코드 탐지 모델 제안

최근 IT 기술이 고도화됨에 따라 악성코드 제작자들은 난독화, 패킹 등 다양한 기법을 활용하여 기존의 시그니처 및 패턴 기반 정적 분석을 우회하고 있습니다. 이에 난독화나 패킹 여부와 관계없이 중간언어 형태로 코드를 표현해주는 LLVM IR 로 악성코드 탐지 모델을 제안합니다.

다음은 간단한 사전 지식입니다.

LLVM란

어셈블리와 유사한 낮은 수준의 프로그래밍 언어인 IR 코드를 생성해주는 컴파일러입니다.

다음 사진은 LLVM 컴파일 기반입니다.

IR 코드는 다음 사진과 같습니다.

이러한 LLVM IR을 활용한 이미지 기반의 CNN 모델을 제안한 것입니다.

 

2. 핵심 아이디어

핵심 아이디어는 특정 바이너리 파일을 LLVM IR로 변환한 뒤, 이를 다시 이미지로 변환해서 CNN모델에 적합한 형태로 바꿔주고 이를 학습시키는 것입니다. LLVM IR은 아키텍처에 종속되지 않은 중간 언어로, 난독화나 패킹이 적용되어도 코드의 패턴을 일관되게 분석할 수 있다는 장점으로 이를 이용해 악성코드 탐지를 한다는 것입니다.

다음 사진은 탐지 모델 일련의 과정입니다.

 

3. 방법

먼저 LLVM IR 코드를 얻기 위해서 리프팅 방식을 사용합니다.

리프팅이란

이미 컴파일된 바이너리 파일을 역으로 컴파일하여 IR 코드 생성되는 부분으로 다시 올라가는 방법입니다.

RetDec 디컴파일러를 사용하여 바이너리 파일을 LLVM IR로 리프팅합니다.

이후 추출된 ".ll" 파일을 LLVM IR을 이미지로 변환하는데 numpy 리스트 형식으로 불러와서 unit8 형식으로 128x128 픽셀 크기의 배열을 생성하고 회색조 변환 기법 전처리를 진행합니다. 이후 이미지를 어두운색과 밝은색으로 이진적 구분하여 CNN 모델을 향상시킵니다.

CNN 모델로는 전이학습이 가능한 텐서플로의 케라스에 있는 ResNet50V2를 사용하고, Adam Optimizer를 활용해 학습을 진행하였습니다.

다음 사진은ResNet50V2를 사용한 모델과 CNN 소스코드입니다.

모델의 코드 구현으로는

CNN을 전이학습 모델로 정하고 input shape는 데이터셋 이미지 사이인 128로 지정하고, Optimizer는 adam으로 지정하였습니다. 그리고 adam으로 지정한 이는 구이 간단하고 그 안의 연이 타 optimizer에 비해 효율적이기에 사용하였다고 합니다. 이후 batch size는 4, epochs는 10, verbose는 1로 지정하여 학습을 진행하였습니다.

 

4. 결과

이 모델은 악성코드 1,920개와 정상 파일 1,920개로 구성된 데이터셋에서 최대 64%, 평균63.4%의 탐지 성능을 보였습니다. 다른 오픈소스 탐지 모델인 CyberMachine, DeepMalwareDetector와 비교했을 때 비교적 정상적인 탐지가 가능한 모델이라고 평가할 수 있습니다.

 

5. 결론

본 모델의 알고리즘은 악성코드 탐지 한계가 존재합니다. 악성코드가 시스템 메모리(RAM)에서 바로 실행되어 별도의 실행 파일을 남기지 않는 파일리스, 위조 데이터를 만들어서 기계학습 모델을 공격하는 적대적 공격의 단점이 존재합니다.

향후 지속적인 연구를 통해 패킹된 파일의 특성에 맞는 feature vector와 탐지 기법 추가 적 용을 통해 탐지 성능 높이는 시스 구축이 가능할 것이라고 기대 효과를 언급하였습니다.

 

논문을 읽고 난 후

악성코드를 탐지하는 방식이 기존 연구들과 차별화가 되어 굉장히 신선했고 재미있게 논문을 읽었습니다. 악성코드의 탐지율이 오로지 높은 것만이 좋을 수도 있지만 다양한 관점에서 문제를 바라보는 것이 더 중요하다라고 생각하게 되었습니다. 그렇기 때문에 후속 연구를 통해 제안된 모델이 더욱 개선되고 실용화 되면 정말 좋을것 같다고 생각했습니다.

 

 

인용, 출처 :

박경빈, 윤요섭, 또 올 가, 임강빈. (2024). LLVM IR 대상 악성코드 탐지를 위한 이미지 기반 머신러닝 모델. 정보보호학회논문지, 34(1), 31-40.

목차
1. Amcache.hve 파일 소개
2. Amcache.hve 파일 위치 및 구조
3. Amcache.hve 파일 분석(방법)
4. Amcache.hve SHA-1 값 
5. 결론
 

1. Amcache.hve 파일 소개

Amcache.hve 파일은 본래 윈도우 7에서 사용하던 'RecentFileCache.bcf' 아티팩트를 윈도우 8이상의 운영 체제에서 사용되는 아티팩트로 계승되었습니다. 이 파일은 Application Compatibility Cache의 줄임말입니다.
시스템에서 실행된 프로그램과 관련된 정보를 저장합니다.
레지스트리 일부는 아니지만, 하이브 구조를 가지고 있어 하이브 형식으로 저장되며, 프로그램 실행 기록, 파일 경로, 타임스탬프 등 다양한 정보를 가지고 있습니다.
 

2. Amcache.hve 파일 위치 및 구조

Amcache.hve 경로 : C:\Windows\AppCompat\Programs\Amache.hve (%systemroot%/appcompat/Programs/Amcache.hve)
이 파일은 하이브 형식으로 저장되며 주요키로는 다음과 같습니다.
 
- Root\File : 실행된 프로그램의 파일 경로, 크기, 타임스탬프 등의 정보를 저장
- Root\Programs : 실행된 프로그램의 이름, 버전, 언어 등의 정보를 저장합니다.
- Root\InventoryApplicationFile : 설치된 프로그램의 파일 정보를 저장합니다.
- Root\InventoryApplication : 설치된 프로그램의 이름, 버전, 언어 등의 정보를 저장합니다.

3. Amcache.hve 파일 분석
 

파일을 분석하는데 Registry Explorer 를 사용하였습니다. 이 도구를 이용해 Amcache.hve 파일에 접근합니다(관리자 권한 실행)

Reg Explorer로 확인한 결과 사진

위 사진 처럼 내 디바이스의 OS가 언제 설치 되었는지 그 OS의 언어 Pro인지와 같은 정보들도 확인 가능합니다.

4월1일에 Dism++ 을 설치한 사진

위 사진처럼 인벤토리 응용파일 폴더 안에서 확인 해본 결고 언제 내가 Dism 파일을 설치 했는지와 경로까지 다 나오는 것 또한 확인이 가능했습니다.
맨 오른쪽에 있는 값은 SHA-1 해시를 나타내는데 SHA-1은 해시값이 이미 알려진 악성프로그램과 비교해서 악성프로그램의 여부도 확인 가능합니다.
 

4. Amcache.hve SHA-1 값 

Amcache.hve 파일에는 실행된 프로그램의 SHA-1 해시값이 저장될 수 있는데 이는 프로그램의 "무결성" 을 확인하고 변조 여부를 판단하는데 큰 역할을 합니다. 하지만 이러한 해시값에 제한 사항이 존재하는데 그 사항은 다음과 같습니다.
- 프로그램의 크기가 일정 크기(약1MB)이상인 경우, SHA-1 해시값이 부정확하게 기록될 수 있습니다.
- SHA-1해시는 Windows 성능상의 이유로 전체 파일을 해시하지 않고 파일의 처음 31,457,280Byte만 저장됩니다. 따라서 파일이 해당 바이트를 넘어버리면 처음 바이트만 해시값에 사용됨으로 그 이후의 값은 무결성은 체크가 되지않는다는 것을 알 수 있습니다.
 
 
 

5. 결론

 
Amcache.hve 파일은 윈도우 8 이상의 시스템에서 실행된 프로그램과 관련된 중요한 정보를 저장하는 아티팩트입니다.
이러한 아티팩트는 포렌식 조사에 필수적인 정보를 얻을 수 있기에 포렌식을 하면 반드시 알아야하는 아티팩트입니다.
물론 만능은 아니기에 4번에서 말한 제한 사항 SHA-1해시 값의 부정확성, 사용자가 수정할 수도 있다는 점을 사전에 알고 있어야 한다는 것입니다.
 
 
 
지금까지 Amcahce.hve 파일에 대해서 알아 보았습니다.
 
 
 
 
 
 
 
 
 
 
 

라즈베리파이(raspberrypi) 를 시작해보려고 구매를 했다. 택배가 오기 만을 기다려지게 되는데 재밌게 할 수 있을 것 같아서 기분이 좋았다. 그리고 라즈베리파이 가 와서 오자마자 바로 세팅을 해봤지만 내 생각대로 잘 되지 않아서 여러가지를 찾아보고 인터넷에도 내가 원하는 답을 쉽게 찾을 수 없었다. 하지만 처음부터 천천히 해보고 뭐가 잘못됐는지 피드백을 해서 결국은 잘되었다. 내가 실수했던 점은 바로 OS를 SD카드에 설치를 잘못 했기 때문이다. 내가 직접 압축을 풀어서 넣었기에 당연히 인식이 안되고 생각처럼 되질 않았던 것 같다.

++ 현재는 라즈베리파이 전용 imager 가 존재하기 때문에 해당 이미저를 이용해 설정해서 sd 카드에 os 를 설치해주면 간단하게 해결된다

옛날처럼 어렵게 usb 이미지 툴을 이용해서 할 필요가 없다.

 

+ Recent posts