펌웨어는 특정 목적에 맞게 하드웨어를 동작시키기 위한 코드들로 구성되며, 일반적으로 부팅과 관련한 코드, 운영체제, 파일 시스템 등으로 구성된다. 이러한 펌웨어 코드는 비휘발성 메모리인 ROM, PROM, EPROM, EEPROM 에 일반적으로 존재하지만 최근에는 플래시 메모리로 대체되고 있다. 펌웨어는 덤프를 통해 수집하는 방법이 존재하며 제조사에서 공개하는 경우가 있으므로 해당 웹 사이트에서 펌웨어를 수집할 수 있다.
 

1. binwalk ( Firmware Analysis Tool )

  Open Source 펌웨어 분석 툴로 분석, 리버싱, 데이터 추출 등의 기능을 제공한다. Python 으로 작성되어 있으며 현재 리눅스 플랫폼만 지원한다.
https://github.com/devttys0/binwalk/blob/master/INSTALL.md

 


 

2. Firmware Modification Kit

  펌웨어를 수정할 수 있는 도구로 해당 시스템의 펌웨어 코드를 재컴파일 없이 펌웨어를 수정할 수 있도록 도와주며 GNU GPL Version 2 라이센스 기반의 오픈소스 형태로 제공되고 있다. 펌웨어 분석 및 수정에 활용 할 수 있는 다양한 도구 및 스크립트들을 하나로 구성하여 제공한다
 
  2.1) Firmware Modification Kit 환경 구성 
  
   2.1.1) 소스코드 다운로드 
    별도의 설치 과정은 없으며 아래 링크에서 소스코드를 다운 받아 압축 해제한다.   https://code.google.com/archive/p/firmware-mod-kit/
   
   2.1.2) 관련 라이브러리 설치
    Firmware Modification Kit 을 사용하기 위해서는 압축라이브러리( gzip / lzma )python magic 모듈이 필요하다우분투의 경우 아래 명령어로 간단하게 설치 할 수 있다.

 

  sudo apt-get install build-essential zlib1g-dev liblzma-dev python-magic

'0x003 Reversing > 04. Theory' 카테고리의 다른 글

[Linux] ShellCode 제작 방법  (0) 2017.12.29
[Tip] IDA Map 연동  (0) 2017.12.29
[Windows] Hooking Immunity Debugger  (0) 2017.12.29
[Tip] Process 내 DLL 주소 찾기  (0) 2017.12.29

typedef struct _IMAGE_EXPORT_DIRECTORY
{
    DWORD Characteristics
    DWORD TimeDateStamp
    WORD MajorVersion
    WORD MinorVersion
    DWORD Name
    DWORD Base
    DWORD NumberOfFunctions
    DWORD NumberOfNames
    DWORD AddressOfFunctions   // 함수 주소 배열(EAX)
    DWORD AddressOfNames    //함수명 배열
    DWORD AddressOfNameOrdinals  //함수 서수 배열
} IMAGE_EXPORT_DIRECTORY, *PIMAGE_EXPORT_DIRECTORY

 

 

1) 함수명 배열로 이동하여 원하는 함수의 이름과 해당 인덱스를 찾는다.
2) Ordinals 배열에서 인덱스에 해당하는 서수 인덱스 값을 찾는다.
3) EAT 배열에서 서수 인덱스에 해당하는 함수 offset을 확인한다.
4) DLL Base 주소와 offset을 합해 함수의 실제 주소 값을 구한다. 

'0x001 Programming > 01. C | C++' 카테고리의 다른 글

[Example] 생산자 | 소비자  (0) 2017.12.29
[Tip] 동기화  (0) 2017.12.29
[Tip] Thread 사용시 주의 사항  (0) 2017.12.29
[Tip] 프로세스 관리  (0) 2017.12.29
[Example] 이진 검색 트리를 이용한 파일 정렬  (0) 2017.12.29

  파일 시스템의 변화를 탐지하려면 다음과 같은 Windows API가 필요하다.


    1) FindFirstChangeNotification
    2) FindNextChangeNotification
    3) ReadDirectoryChangeW

import sys
from ctypes import *

 

if __name__ == "__main__":

    target_dll = sys.argv[1]
    target_function = sys.argv[2]
    kernel32 = windll.kernel32

    dll = windll.LoadLibrary(target_dll)

    function = kernel32.GetProcAddress(dll._handle, target_function)

    print "[#] Find Address %s(%s) : 0x%08x" % ( target_dll, target_function, function )

 

사용 방법 : python function.py [Library] [Function]

리눅스에서 ln 명령은 파일시스템에서 링크 파일을 만드는 명령입니다.

 1) 심볼릭 링크( Symbolic Link )
  - 단순히 원본 파일을 가리키도록 링크만 생성한 것으로 윈도우의 바로가기를 생각 하시면 됩니다. 심볼릭 링크가 생성된 파일의 원본이 없는 경우 에러 메시지를 출력해줍니다.

 2) 하드링크( Hard Link )
  - 원본 파일과 이름만 다른 동일 파일이라고 생각하시면 됩니다. 내용은 완전히 동일하지만 파일명이 다릅니다.

 3) 사용법
  ln [Option] [Original] [Target]

 

'0x002 OperatingSystem > 02. Linux' 카테고리의 다른 글

[Tip] EggShell  (0) 2017.12.29
[Tip] xinetd  (0) 2017.12.29
[Tip] 동시에 여러 명령 실행하기  (0) 2017.12.29
[Command] Find  (0) 2017.12.29
[ShellCode] Bash Shell Code  (0) 2017.12.29

Linux 환경에서 Bash Shell 을 실행시켜주는 ShellCode 입니다.

"\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80"

'0x002 OperatingSystem > 02. Linux' 카테고리의 다른 글

[Tip] EggShell  (0) 2017.12.29
[Tip] xinetd  (0) 2017.12.29
[Tip] 동시에 여러 명령 실행하기  (0) 2017.12.29
[Command] Find  (0) 2017.12.29
[Command] ln  (0) 2017.12.29

Immunity Debugger는 13가지 후킹 기능을 지원하며 각 후킹은 독립 스크립트로 구현하거나 PyCommand 내부에서 구현할 수 있다.

 1) BpHook/LogBpHook : 브레이크 포인트가 발생될 때 호출 된다. BpHook는 대상 프로세스를 일시 정지 시키지만 LogBpHook는 그렇지 않다.
 2) AppExecptHook : 종류에 상관없이 예외가 발생하는 경우 호출된다.
 3) PostAnalysisHook : 디버가가 로드된 모듈에 대한 분석 작업이 끝났을 때 호출된다. 
 4) AccessViolationHook : 접근 위반이 발생할 때 마다 호출 된다.
 5) LoadDllHook/UnloadDllHok : DLL Load/Unload 시 호출 된다. 
 6) CreateThreadHook/ExitThreadHook : 스레스 생성 및 소멸 시 호출 된다.
 7) CreateProcessHook/ExitProcessHook : 프로세스 생성 및 소멸 시 호출 된다. 
 8) FastLogHook/STDCALLFastLogHook : 대상 프로세스의 특정 레지스터 값이나 메모리 주소를 로깅한다.

출처 : 파이썬 해킹 프로그래밍

'0x003 Reversing > 04. Theory' 카테고리의 다른 글

[Linux] ShellCode 제작 방법  (0) 2017.12.29
[Tip] IDA Map 연동  (0) 2017.12.29
[Tip] IoT 펌웨어 분석 환경 구성  (0) 2017.12.29
[Tip] Process 내 DLL 주소 찾기  (0) 2017.12.29

1) FS 레지스터를 이용하여 TEB 구조체에 접근한다. ( TEB는 현재 실행되고 있는 Thread에 대한 정보를 가지고 있다.  )
2) TEB + 0x30 에 위치한 PEB 구조체에 접근한다. ( PEB 구조체는 실행 중인 프로세스에 대한 정보를 담아두는 구조체이다. )
3) PEB 구조체 내에 0x00c 에 위치한 Ldr 멤버 현재 로드된 DLL 에 대한 정보를 링크드리스트 형태로 가지고 있다.

Windbg 명령어
1) db : Byte 단위로 메모리를 표시
2) dd : double Word 단위로 메모리 표시
3) dt : type을 표시( 구조체 등 )

'0x003 Reversing > 04. Theory' 카테고리의 다른 글

[Linux] ShellCode 제작 방법  (0) 2017.12.29
[Tip] IDA Map 연동  (0) 2017.12.29
[Tip] IoT 펌웨어 분석 환경 구성  (0) 2017.12.29
[Windows] Hooking Immunity Debugger  (0) 2017.12.29

msfpayload / msfencode 가 msfvenom 으로 통합되었습니다.


 사용법)
  msfvenom -p [payload] text=[payload option] -e [encoder] -b [bad char] -f [output format]

'0x004 Security > 01. Metasploit' 카테고리의 다른 글

[Theory] Metasploit Basic  (0) 2017.12.29
[Theory] 모의 해킹의 기초  (0) 2017.12.29
메타스플로잇은 수 많은 사람들이 참여하는 오픈소스 이다. 메타스플로잇과 관련된 기본적인 용어들에 대해 정리한다.


 1) 익스플로잇 : 시스템에 존재하는 취약점을 악용하는 방법이다. 버퍼 오버플로우, SQL 인젝션 등이 있다.

 2) 페이로드 : 대상 시스템에서 실행시키고자 하는 코드이다.

 3) 셸코드 : 공격을 수행할 때 페이로드로 사용되는 명령 집합이다.

 4) 리스너 : 연결 요청을 대기하는 메타스플로잇의 구성요소이다.


 메타스플로잇은 콘솔, 커맨드 라인, 그래픽 등 다수의 인터페이스를 제공한다. 메타스플로잇에서 제공하는 인터페이스는 다음과 같다.

 

 1) MSFconsole : 익스플로잇 실행, 모듈 로딩, 리스너 생성 등 프레임워크에서 사용할 수 있는 거의 모든 기능을 제공한다.

 2) MSFcli : 대화형 방식을 사용해 모든 기능에 접근이 가능하며 스크립트 수행과 명령 해석 기능에 중점을 둔다.

 

 메타스플로잇에서 제공하는 유용한 유틸리티 목록은 다음과 같다.


 1) MSFpayload : 셸코드를 C, 루비, 파이썬 등 다양한 형태로 생성해준다.

 2) MSFencode : MSFpayload 에서 생성한 코드 사이에 존재하는 Null 문자를 제거하거나 백신 등 프로그램의 탐지를 회피하기 위해 바이너리를 인코딩 하는 기능을 제공한다.

 

'0x004 Security > 01. Metasploit' 카테고리의 다른 글

[Command] msfvenom  (0) 2017.12.29
[Theory] 모의 해킹의 기초  (0) 2017.12.29

+ Recent posts