Thursday, January 10, 2019

kali 를 이용하여 NetCat

2019-01-10

Kali를 이용하여

  NetCat 해보기


netcat : 

  • network connection에서  Read, Write를 할 수 있는 유틸리티 프로그램
  • 네트워크에 대한 디버깅 툴로 사용되기도 하며, 디지털 포렌식에 있어서 라이브시스템의 데이터를 손상없이 가져오는데 사용되기도 한다.

  • 환경
    • 조사대상 PC : Kali
    • 조사자 PC : Windows7


  • Window의 데이터를 Kali에 데려와서 내용을 읽어봄
  • Windows 서버에 Kali를 연결하여 실행
    • 환경 : Windows 7
  • Kali 에서 Windows를 마운트
[ NTFS directory ]




  • NETCAT을 이용하여 내용을 가져오기
[ 1. 경로를 이용하여 포트로 받아와서 내용저장 ]


[ 2. 조사대상의 PC에 mount 하여 정보 가져오기 ]
SAM / SYSTEM / SECURITY / SOFTWARE / DEFAULT / NTUSER.DAT



[ Alien Register Viewer ]
조사자 PC에서 조사대상의 PC를 확인 가능


[ 내용 ]


시스템 포렌식 중 윈도우 포렌식

2019-01-10

System Forensic 

   ; 운영체제에 대해 포렌식
   ; 실시간 대응-> 이미징 작업-> 윈도우일 경우, 윈도우 포렌식


 WINDOWS FORENSIC

   ○ Registry

       - 중점적으로 포렌식하는 부분
       - regedit

[ HKEY ]



[ 하드웨어 usb 벤더아이디, 디바이스 아이디 ]

  • SAM
    • cain and abel 을 이용해 Registry 분석
  • 무선랜 접속 정보
    • SSID정보도 확인가능 => 위치를 파악할 수 있음(2000 / XP의경우)

   ○ Event Log

       - Windows에서 정해진 Log 형식
       - eventvwr   



   ○ 서비스마다 별도의 로그

       - windows에서 만들지 않은 로그에 대하여 별도의 디렉토리에 별도의 파일로 남김
         하나하나 확인해야함
       - Apache : Access

Wednesday, January 9, 2019

실시간 대응 에 대한 이해

2019-01-08

Live Response

= Live Evidence Aquisition

    휘발성 정보(증거) 수집

  • 메모리 덤프
  • 프로세스 목록 및 객체 정보 확보
  • 소켓 정보 확보
  • 임시디렉토리 내용 확보

○ 출력 결과 저장

    외장 USB Memory/HDD에 저장
    원격 컴퓨터에 전송


○ 외장 USB Memory/HDD에 저장

     -결과를 저장할 저장장치를 연결
     -실행할명령 > 결과를저장할파일이름
      예) netstat -nr > e:\result.txt

○ 원격 컴퓨터에 전송(NetCat.exe)

    -조사자 컴퓨터에서 nc.exe를 서버모드로 작동시킨다.
      예) nc -l -p 10005
    -조사대상 컴퓨터에서 포렌식툴을 실행시킨다.
      예) 실행할명령 | nc 서버IP주소 포트번호
           netstat -nr | nc 192.168.1.1 10005


[ nc.exe가 있는 경로로 들어가서 nc -l -p 10000 ( loop, port port number) ]



연결


연결됨


○ 로카르드 교환법칙(Locard's exchange Principle) 

○ 물리 메모리 덤프

      tool; windd, mdd, dumppit
      윈도우는 별도의 도구를 사용해야함



[ 사용한 내역 서치 ]

○ 시스템 시간 정보

     time /t      내장
     date /t      내장


○ 기본 네트워크 정보

    ipconfig /all

○ Socket 정보

    - 실행중인 서비스 확인
    - TCP 연결 정보 확인
       netstat -ano   내장
       IceSword   다운로드

○ Routing Table

    - 라우팅 테이블 변조 유무 확인
      netstat -nr   내장

○ route print


○ 공유 관련 정보

    - 공유 내역 확인
    - 공유 폴더에 접속한 기록 확인
       net share      내장
       net session      내장
       logonsessions   sysinternals
       psloggedon      sysinternals
       net file         내장
       openfiles      내장
       psfile         sysinternals
       net use
        예) net use z:

(참고) SysInternals
- 윈도우즈 관련 고급 툴을 제작하는 회사
- 마이크로소프트에 합병됨
https://docs.microsoft.com/en-us/sysinternals/

○ NBT Cache Table

    (NetBIOS over TCP/IP)
      nbtstat -c
      [참고] LAN에서만 사용 가능하지만 TCP/IP 에 얹어서 Internet으로 넘어갈 수 있게 됨
               \\컴퓨터이름/IP/DomainName\공유이름

○ 윈도우 객체 관련 정보

    - Windows(KERNEL)-----[관리]----->HANDLE(Process/Thread)
    프로세스/쓰레드
    핸들
    DLL

[ Process Explorer ]
사용중인 HANDLE과 그 안에서 Key 확인가능


○ Process 목록

    tasklist      내장
    pslist         sysinternals

○ Handle 목록

    handle         sysinternals

[ 실행 ]


[내용이 많아서 > handle.txt에 따로 저장 ]


[ 기록 확인 ]


[ 탐색기같은 exe ]


○ DLL 목록

    listdlls         sysinternals

[ Listdlls6s.exe ]



○ 명령어 히스토리

    doskey.exe   내장
       doskey /history


○ 자동 실행 항목

    서비스
    레지스트리
    시작프로그램 폴더

○ Service 목록

    psservice   sysinternals

○ Registry 자동 실행 항목

    autorunsc.exe   sysinternals   - CLI
    = autoruns.exe   sysinternals  - GUI
    - 자동실행되는 목록 확인 가능



○ 예약 작업

    at      내장(명령으로만 사용가능)
    schtasks   내장(윈도우 예약작업)

○ 클립보드

    clipbrd      내장(XP까지만)
    pclip      sourceforge.net/project/unxutils

[ clipboard에 저장된 내용 ]
ctrl + c

Tuesday, January 8, 2019

EXT2 파일 시스템 분석 실습

2019-01-08

EXT2 파일 시스템

   분석 및 복구

      조사자 PC

       1. Root 하위폴더에 4000byte, 8000byte, 40000byte 파일 만든 거 확인
       2. 삭제후 변화되는 부분확인
            TOOL : DirectoryEntry, Inode
       3. 증거수집 / 분석
            TOOL : FTK Imager, Autopsy(sleuthkit)

1. /home2 의 txt파일 확인

 [ Root Direcotry Entry ]
4000byte 파일 Directory Entry
Root Direc.부터 0x0b만큼 이동 = 12번째 (1119->1125) 
2 INODE Per A Sector ->12번째면 6섹터를 이동하고 해당 섹터의 2번째 Inode Table 위치


[ 0x1008 =4104*8+63=32895sector ]


[ 내용 ]



[ 400byte이상이라 8개 섹터 사용 ] 





2. 


[ 4000byte삭제 ]


INODE가  0x0E -> 0x00으로 바뀜


[ INODE ]
Deleted Time , Hard Link Count 가 바뀜


3.


[ FTK Imager ]


[ autopsy ]


[ 내용도 확인 ]

Monday, January 7, 2019

EXT2 File System 분석

2019-01-07 

EXT2 파일 시스템

[아래 내용의 환경]
CentOS 6 
3GB-HDD, 2GB-파티션
EXT2 Format
NewMonday.txt 파일, 10글자내용
-> poweroff -> centos의 하드디스크를 분석용 PC에 달기

EXT File System

  종류

  • EXT2 :  리눅스 계열의 주 파일시스템
  • EXT3 :  EXT2 + Journaling file system
  • EXT4

  • EXT2


    • Block(Data Block) : 섹터의 모음 (=Cluster)
    • 파티션의 처음부터 블록단위로 사용한다.
[참고] UFS의 경우: cluster == EXT의 경우 : block

    EXT 2 파일 시스템의 구조 개요

  • First Block(0번 Block)
    • Boot Sector(0~1번 Sector)
    • Super Block(2번 Sector)
  • GDT(Group Descriptor Table)
    • Group Descriptor Entries
  • Block Groups
    • Block Bitmap
    • Inode Bitmap
    • Inode Table
      • Inodes
        • 파일에 대한 정보 모두 가지고 있음 without 파일이름
        • 파일 하나에 Inode 하나
  • Data Blocks
    • Root Directory
    • Sub Directories
    • Filies

  • First Block(0번 Block)

[ MBR의 위치 확인 ]
0x3F = 0번 block의 상대값 

  • Boot Sector

파티션의 첫번째, 두번째 섹터는 Boot Strap Code가 기록되는 공간

  • Super Block

[ Super Block의 구조 ]

    • 파티션의 구조 정보
    • Block count: 파티션의 Block의 개수
      • 파티션의 크기(Byte) = Block 개수 * Block 크기
    • 파티션의 크기(Byte) = Block 개수 * Block 크기
   [ 참고 ] Block?
      - 섹터의 모음
      - 일반적으로 가장 많이 사용하는 블록의 크기는 4KB(4096 Byte, 섹터 8개)

  • Inode count: 파티션의 Inode의 개수
  • Reserved Block count
    • 예약된 블록의 개수
    • 파티션이 꽉찼을 때를 대비하여 예비공간을 확보하는 개념
  • Free Block count 
    • 사용되지 않고 있는 블록의 개수
  • Free Inode count
    • 사용되지 않고 있는 inode의 개수
  • Log Block Size
    • Block 의 크기를 의미한다.
    • 0 -> DataBlock의 크기가 1024 Bytes
    • 1 -> DataBlock의 크기가 2048 Bytes
    • 2 -> DataBlock의 크기가 4096 Bytes
  • Block per Group : 블록 그룹이 몇개의 데이터블록으로 구성되었는지 기록되어 있다.
  • Inode per Group : 블록 그룹에 몇개의 inode이 있는지 기록되어 있다.


[Super Block - Magic Signatuer ]


  • GDT entry


    • Starting Block Address of Block Bitmap
    • Starting Block Address of Inode Bitmap
    • Starting Block Address of Inode Table


[ 첫번째 비트맵의 시작하는 블록 ]
0x84 = Starting Block Address of Inode Table
0x84=132
(132*8)+63
block addr. * Sector per block + 0번 block의 섹터 절대값


  • Block Group

    • 데이터 블록을 관리하기 용이하게 하기 위해서 그룹으로 묶어 놓았다.
    • 그룹 별로 Inode Table, Data Block 등의 구조가 따로 만들어 진다.
    • GDT (Group Descriptor Table) Entry에 그룹의 위치와 구조가 기록되어 있다.

  • Block Bitmap


    • Block의 사용현황을 빠르게 파악할 수 있도록 표의 형태로 관리
      • 예) 0번 비트가 1이면 0번 블록은 사용중임
      • 1번 비트가 0이면 1번 블록은 사용중이지 않음
      • 예) BitMap의 값이 0xFF07 이면 1111 1111 0000 0111 
      • => 1111 1111 1110 0000 으로 바이트 단위로 상위 주소에서 하위 주소로 읽는다. 

  • Inode Bitmap

   Inode의 사용현황을 빠르게 파악할 수 있도록 표의 형태로 관리

  • Inode Table

    Inode를 모아놓은 공간

  • Inode 

    • 파일의 속성 정보를 기록
    • 파일의 권한, 크기, 소유자, 소유그룹, 시간정보, 파일 내용이 기록된 블록번호
    • 파일의 이름은 디렉토리 엔트리에 기록되고 inode에는 기록되지 않는다.
    • 파일이 생성되기 위해서는 inode가 필요하다.
    • 파일 시스템을 생성할 때 inode의 개수가 결정되므로 inode가 부족한 경우 파일을 생성할 수 없다.
[ inode table 의 inode 구조 ]
inode가 연속적으로 나타남


[ 1개의 Inode ]



[ 여기로 찾아가보기 ]

Directory Entry

  • File Mode


 [linux - chmod : rwx 부분 ]


[ 파일 모드 ]
0x41ED = 
4000[Directory] +100[소유자:읽기] + E[소유자: 쓰기, 실행, 소유그룹: 읽기] +D[소유그룹: 쓰기, 기타: 쓰기, 실행]



예) Root Directory = 0x41ED

  drwxr-xr-x

  - d --> 0x4000

  - 소유자 권한 rwx -->  0x100 + 0x80 + 0x40
  - 소유그룹 권한 r-x --> 0x20 + 0x8
  - 기타 권한 r-x --> 0x4 + 0x1
  ==> 0x41ED
  • UID(16bit) 
         이 파일의 소유자의 ID (UID)
  • Size (Byte)(32bit)
         파일의 크기( 32bit => 2^32 -> 4GB)
  • Last Modified Time(32bit)
    • 파일 내용이 변경되는 경우에 업데이트된다.
    • 파일 수정, touch 명령 사용 시
  • Deleted Time (32bit)
    • 파일이 삭제된 시간 정보
    • 파일이 삭제될 때 기록된다.
  • GID(16bit) 
    • 이 파일의 소유그룹의 ID (GID)
  • Hard Link (16bit)
    • 디렉토리 엔트리는 다른 것을 사용하지만 Inode는 같은 것을 사용한다. 
  • Block Count (32bit)
  • Flags(32bit)
  • OS Description 1(32bit)
  • Direct Pointer (32bit * 11=352 bit)
    • 파일의 내용이 들어있는 블록의 번호가 기록되어 있다.
    • 12개의 Direct Pointer가 있으므로 기록할 수 있는 파일의 크기는 최대  48KB이다.
      • 12 * 4KB = 48KB
  • Single Indirect Pointer (32bit)
    • 추가한 Direct Pointer가 있는 블록의 번호가 기록되어 있다.
    • 여기에 적혀있는 블록을 가보면 Direct Point가 1024개가 있다.
    • Single Indirect Pointer를 사용하면 최대 1024개의 Direct Pointer가 추가되므로 4MB
      • 1 * Single Indirect Pointer --> 1024 * Direct Pointer --> 1024 * 4KB = 4096KB =4MB
  • Double Indirect Pointer (32bit * 11=352 bit)
    • 추가한 Single Indirect Pointer가 있는 블록의 번호가 기록되어 있다.
    • 여기에 적혀있는 블록을 가보면 Single Indirect Point가 1024개가 있다.
    • Double Indirect Pointer를 사용하면 최대 1024개의 Single Indirect Pointer가 추가되고 Single Indirect Pointer 1개마다 1024개의 Direct Pointer가 있기 때문에 최대 저장할 수 있는 파일을 크기는 4GB
      • 1024 * 1024 * 4KB =4GB
  • Triple Indirect Pointer (32bit)
    • 추가한 Double Indirect Pointer가 있는 블록의 번호가 기록되어 있다.
    • 여기에 적혀있는 블록을 가보면 Double Indirect Point가 1024개가 있다
      • 1024 * 1024 * 1024 * 4KB = 4TB
  • Generation Number(32bit)
  • File ACL(32bit)
  • Directory ACL(32bit)
  • Block Address of Fragmentation(32bit)
  • OS Description 2(96bit)


[ 예약된 INODE ]


[ 1 섹터당 2개의 INODE TABLE ]
2번 Inode는 Root Directory


[ Directory Pointer ]
루트디렉토리의 포인터로 이동
0x268 번째 Block의 첫번째 섹터


Directory Entry



[ Directory Entry ]
2번 INODE : ROOT Directory
0x0A : lost+found directory 의 주소 (1번노드시작점부터 11번째 노드가 주소)




[참고] 
lost+found --> fsck
파일이 있었는데 fsck(검사)를 했더니 사라지는 경우는!
 lost+found에 넣어뒀을것임


[ Root Directory 이후의 directory 중 3번째 ]
0x3008 의 주소로
























List

MobSF

MobSF는 오픈소스 모바일 앱 자동 보안 진단 프레임워크로 자동 분석 시스템 구축할 때 사용한다. 정정 및 동적 분석이 가능하며, Android, iOS, Windows에 대해 침투 테스트, 멀웨어 분석 및 보안 평가를 할 수 있다. 참고자료 필...