2024. 4. 1. 23:39ㆍInformation Security 정보보안/Malicious Code Analysis 악성 코드 분석
배울내용:
LAB05-01.dll
IDA Pro
IDA 단축키
IDA 주소이동
IDA 고급 정적분석
고급 정적분석 도구
디스어셈블 도구
실행프로그램 분석
악성코드 분석실습
정적 파일 분석도구
동적 파일 분석도구
automatic analysis
Malicious Code Analysis
오늘은 지난 시간에 이어서 추가적인 고급정적분석 해볼것이다
지난시간에 했던 일반 정적 분석 부터 고급 분석 까지 했다 아래의 링크에서 볼수있다
https://sarimus.tistory.com/116
지난시간에 아래와 같이 고급 정적 분석 3번까지 정리했다
==============================================================
고급정적분석 정리
분석파일 : Lab05-01.dll
01. DllMain의 주소는 무엇인가?
.text 영역 :1000D02E
-> IDA로 DLL 파일을 열면 DllMain 부터 시작한다
02. Imports 윈도우를 이용해 gethostbyname을 검색하도록한다
임포트 위치는 어디인가? (alt + T 해서찾음)
idata 영역 :100163CC
03. gethostbyname 에는 함수가 몇개인가 ?
>gethostbyname 클릭후 Ctrl+X 로 확인 (type에 p 가 함수임)
함수는 5개 , 호출은 9 번
==============================================================
이번에는 4번부터 9번까지 분석해볼것이다
[고급 정적 분석]
> 분석 파일 : Lab05-01.dll
04. 0x10001757에 위치한 gethostbyname 호출을 보면 어떤 DNS요청이
이뤄지는지 알수있는가?
먼저 "G" 를 눌러서 10001757 로 점프(주소이동) 해줘서 위와 같은 창을 보이게 만든다
호출이 있다는거는 무언가를 위에서 내려왔기에 gethostbyname 실행전을 자세히 봐야한다
조금 위에 올라가면 off_10019040 에 마우스 커서를 올리면 offset 이 나오는데 이를 더블클릭하게 되면
이렇게 practicalmalwareanalys.. 있던게 보인다
한번더 클릭해보다 보면 이렇게 보이고 또 클릭하게되면 아래처럼 보인다
>10001757 > 1000174E > 1019040 > 10019194 (실제데이터있는곳)
[This is RDO]pics.practicalmalwareanalysis.com
eax , 0Dh 되있는데 D 가 10진수로 계산하면 13 이니깐 (h 는 헥사값)
[This is RDO]pics.practicalmalwareanalysis.com 중 ] 가 끝나는 포인트가 13번째 부분이다
그래서 답은 p 이게 제일먼제 읽게되고 결국 ics.practicalmalwareanalysis.com <<실제론 얘를 호출하게 된다 .
05. 0x10001656에 있는 서브 루틴에서 IDA Pro (1)는
지역면수 변명 몇개?
아까 주소이동했던창에서 ESC 를 누른뒤에 G 를 눌러서 주소를 이동하면 위와같은데 여기에서
-byte ptr -675h 라는게 보이는데 여기에 - 가 있으면 음의오프셋(지역변수) 이고 그게아닌것은 양의오프셋(파라미타) 이다
그런걸 갯수를 더하게 되면 아래와 같다
1) 지역변수 : 23 개 (-인것)
2) 파라미터 : 1개
음의 오프셋 : 지역변수
양의 오프셋 : 파라미터
06. Strings 윈도우를 이용해 디스어셈블리어 내의 문자열
\cmd.exe /c 를 찾으시오
string을 찾으려면 Alt + T 를 하면된다
그리고 String에 cmd.exe 를 검색해보자
\\cmd.exe /c 라는게 보이는데 이걸 좀더 보고싶으니 옆에 노란 부분을 더블클릭해본다
그러면 실제 저장되있는 주소는 아래와 같다
0x10095B34
07. \cnd.exe /c 를 참조하는 코드영역에서 무슨 일이 발생하는가?
상호참조를 Ctrl + X 를 클릭하게 되면 위와같이 나온다
그러면 어떤걸 참고 하는지 보이는데 sub_1000FF58 로 가는걸 알수있다
OK 를 누르면
처음에 찾아왔던길에 다시오게 된다.
그리고 다시 클릭해보면 아래와 같이 cmd.exe 뒤에 어떤 String 들이 보이게 되는데
어떠한 대화나 메세지를 남기는걸 볼수있다
그리고 xdoors 라고 있는걸로봐서는 Backdoor로 의심이 되며 대화내용을 유추하면 시스템 시작 시간, 시스템 유지 시간 등을 알아내려고함
> 백도어 , 시스템 시작 시간, 시스템 유지 시간 등을 알아내려고함
08. 같은영역 0x100101C8 에서 dword_1008E5C4 는 경로를 지정하는
전역함수가 보인다. 악성코드는 어떻게 이것을 설정하는가
(힌트: dword_1008E5C4 를 상호 참조하라)
힌트를 보니
dword_1008E5C4
를 Ctrl+ X 로 상호 작용해서 OK 눌러보면 다른 방법으로 보인다 그런데 위에서 sub_1003695 에서 내러온걸 알수있어서
sub_1003695 를 더블클릭한다
그럼이렇게 GetVersionExA 라는 명령어를 실행하는 부분인걸 확인할수있다
여기서 알아야할것은 윈도우 버전이다
(window XP (VM) 이기때문에 ) windowsNT 의 기본적인 값이 1 로 세팅하기 떄문에 AL 값에 세팅을 1로 한다
그러한이유는 NT 계열의 운영체제의 버전을 읽어 오기 떄문이다
1003695 , al 값을 1 로 설정
만약 2 로 세팅되면 Windows9x 이다
09 그래프 모드를 이용해 sub_10004E79 상호참조 그래프를 그려라 (sub 들어가는건 서브루틴)
이 함수에 진입하기 위해 호출하는 API 함수는 무엇인가?
여기서 그래프모드는 "스페이스바" 이다 10004E79 를 한번클릭한뒤에 스페이스바를 누른다
그러면 이렇게 보이게 된다
그러면 함수들이 몇개 보인다
좀더 보기 좋은방법은 아래와 같다
view > Graphs > User xrefs chart 로 들어간뒤에
깊이를 조절해서 OK 누르면
Sub_10004E79 를 직접 참조하는 함수는 아래와 같고
>GetSystemDefaultLanID, Sprintf,strlen
간접 참조함수는 send, malloc , free 등이 있다
해당 API 함수에만 기반을 두고 이함수를 어떤이름으로 변경하겠는가?
이까 텍스트모드에서 오른쪽 마우스 클릭한뒤에 Rename 을 클릭해서 바꾼뒤에 다시 View Graph 로 열어주면
바뀐걸 볼수있다
바꾸는 이유는 분석가가 알아보기 쉽게 바꿔주는 것이다
참고로 이렇게 바꿔도 원본에는 바뀌지않으니 얼마든지 바꿔도 상관없다 :)
종합적으로 고급 정적파일을 분석한걸 정리하면 아래와 같다
==============================================================
고급정적분석 정리
분석파일 : Lab05-01.dll
01. DllMain의 주소는 무엇인가?
.text 영역 :1000D02E
-> IDA로 DLL 파일을 열면 DllMain 부터 시작한다
02. Imports 윈도우를 이용해 gethostbyname을 검색하도록한다
임포트 위치는 어디인가? (alt + T 해서찾음)
idata 영역 :100163CC
03. gethostbyname 에는 함수가 몇개인가 ?
>gethostbyname 클릭후 Ctrl+X 로 확인 (type에 p 가 함수임)
함수는 5개 , 호출은 9 번
04. 0x10001757에 위치한 gethostbyname 호출을 보면 어떤 DNS요청이
이뤄지는지 알수있는가?
>10001757 > 1000174E > 1019040 > 10019194
[This is RDO]pics.practicalmalwareanalysis.com
eax , 0Dh 되있는데 D 가 13 이니깐 ]가 끝나는게 13 부분임 그래서 답은
pics.practicalmalwareanalysis.com <<실제론 얘를 호출
05. 0x10001656에 있는 서브 루틴에서 IDA Pro (1)는
지역면수 변명 몇개?
(2)파라미터 몇개?
1) 지역변수 : 23 개 (-인것)
2) 파라미터 : 1개
06. Strings 윈도우를 이용해 디스어셈블리어 내의 문자열
\cmd.exe /c 를 찾으시오
0x10095B34
07. \cnd.exe /c 를 참조하는 코드영역에서 무슨 일이 발생하는가?
> 백도어 , 시스템 시작 시간, 시스템 유지 시간 등을 알아내려고함
08. 같은영역 0x100101C8 에서 dword_1008E5C4 는 경로를 지정하는
전역함수가 보인다. 악성코드는 어떻게 이것을 설정하는가
(힌트: dword_1008E5C4 를 상호 참조하라)
1003695
al : 1 로 설정
09 그래프 모드를 이용해 sub_10004E 상호참조 그래프를 그려라 (sub 들어가는건 서브루틴)
이 함수에 진입하기 위해 호출하는 API 함수는 무엇인가?
>GetSystemDefaultLanID, Sprintf,strlen
해당 API 함수에만 기반을 두고 이함수를 어떤이름으로 변경하겠는가?
LangID
==============================================================