/proc/self/maps 파일을 이용하여 실행중인 시스템 메모리 주소 확인하기

모바일 악성코드 분석 중 /proc/ 하단 데이터를 건드리는 코드가 있어 추가로 내용 더 써서 작성하였습니다. 참고로 /proc 디렉토리는 리눅스에서 사용되는 디렉토리이고 시스템의 프로세스 정보를 담고 있습니다. 간단하게 구조를 살펴보자면 아래와 같습니다.

  • /proc 프로세스 정보
  • /proc/[pid]/ : 구동중인 해당 프로세스의 정보
  • /proc/self : 현재 실행중인 프로세스의 디렉토리 표시
  • /proc/[pid]/maps : 해당 프로세스가 mapping 된 메모리 주소 공간

이 중 악성코드 친구가 건드린 /proc/self/maps 파일에 대해 작성해보았습니다.

일단 cat을 통해 maps 파일을 읽어보면 아래와 같이 나타납니다.

cat /proc/self/maps

result

00400000-0040c000 r-xp 00000000 08:05 2097265                            /bin/cat
0060b000-0060c000 r--p 0000b000 08:05 2097265                            /bin/cat
0060c000-0060d000 rw-p 0000c000 08:05 2097265                            /bin/cat
00761000-00782000 rw-p 00000000 00:00 0                                  [heap]
7f46d79da000-7f46d7dd3000 r--p 00000000 08:05 4456585                    /usr/lib/locale/locale-archive
7f46d7dd3000-7f46d7f93000 r-xp 00000000 08:05 8388656                    /lib/x86_64-linux-gnu/libc-2.21.so
7f46d7f93000-7f46d8193000 ---p 001c0000 08:05 8388656                    /lib/x86_64-linux-gnu/libc-2.21.so
7f46d8193000-7f46d8197000 r--p 001c0000 08:05 8388656                    /lib/x86_64-linux-gnu/libc-2.21.so
7f46d8197000-7f46d8199000 rw-p 001c4000 08:05 8388656                    /lib/x86_64-linux-gnu/libc-2.21.so
7f46d8199000-7f46d819d000 rw-p 00000000 00:00 0
7f46d819d000-7f46d81c1000 r-xp 00000000 08:05 8388642                    /lib/x86_64-linux-gnu/ld-2.21.so
7f46d8379000-7f46d839e000 rw-p 00000000 00:00 0
7f46d83be000-7f46d83c0000 rw-p 00000000 00:00 0
7f46d83c0000-7f46d83c1000 r--p 00023000 08:05 8388642                    /lib/x86_64-linux-gnu/ld-2.21.so
7f46d83c1000-7f46d83c2000 rw-p 00024000 08:05 8388642                    /lib/x86_64-linux-gnu/ld-2.21.so
7f46d83c2000-7f46d83c3000 rw-p 00000000 00:00 0
7ffc9c15b000-7ffc9c17c000 rw-p 00000000 00:00 0                          [stack]
7ffc9c1f1000-7ffc9c1f3000 r--p 00000000 00:00 0                          [vvar]
7ffc9c1f3000-7ffc9c1f5000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]

감이오시나요..? 실행되고 있는 프로세스의 메모리 주소를 알 수 있습니다. 제가 cat 명령을 썼기 때문에 맨 윗줄에 /bin/cat 도 나타났습니다.

Maps 파일을 상세히 보자면 아래와 같이 분류를 나눌 수 있습니다.

메모리위치        | 권한 | offset | device | inode | path
00400000-0040c000  r-xp  00000000  08:05  2097265  /bin/cat
0060b000-0060c000  r--p  0000b000  08:05  2097265  /bin/cat

분석했던 악성코드는 공유라이브러리 때문에 해당 파일에 접근한듯 합니다. 테스트 프로그램을 실행 후 메모리에 대한 정보 확인이 필요할 때 해당 파일을 열어 확인하면 조금이나마 도움이 될 수 있습니다 :)