-
Notifications
You must be signed in to change notification settings - Fork 0
SECURITY STEGANOGRAPHY
스테가노그래피(steganography) 는 데이터를 은폐 기술로 그리스어로 감추어져 있다는 뜻인 'stegano' 와 쓰다, 그리다는 뜻의 'graphos' 의 합성어이다. 이는 사진, 음악, 동영상 등의 일반적인 파일 안에 데이터를 숨기는 기술이다. 크립토그래피(cryptography) 는 데이터의 내용을 읽을 수 없도록 하는 기술이라면 strganography는 데이터의 존재 자체를 감추는 기술이다.
편지의 마지막 단어만 읽으면 메세지가 된다.

사람의 눈에는 서로 다르지 않은 동일한 파일로 인식된다.
하지만 steganography는 데이터에 대한 overhead가 상당히 크다. 또한 숨기는 방식이 노출된다면 누구라도 어렵지 않게 메세지를 알아낼 수 있다. 이런 단점이 있음에도 사용하는 이유는 일반적으로 암호화된 결과는 누가 보아도 암호화된 정보처럼 보이지만 steganography는 비밀통신을 한다는 사실자체를 숨기는데 유용하다.
steganography가 악용된 실제 사례
-
미국의 911테러를 이르킨 빈라덴이 테러지령을 steganography로 전달한 것이 밝혀지며 유명한 정보 은닉 기술로 알려졌다.
-
한때 악망 높았던 랜섬웨어(ransomware) 가 steganography를 이용하였다. 이메일을 통해 window script file(.wsf) 형식의 악성 스크립트 파일을 첨부하고, 그 해당 wsf이 특정 URL로 접속하게하여 이미지 파일을 다운로드시켰다. 그 이미지에는 랜섬웨어 관련 파일들이 zip의 형태로 숨겨져 있었다.

랜섬웨어에 감염된 화면
-
배너 광고에 malware가 숨겨진 사례로, Internet Explorer와 adobe Flash player의 보안 취약점을 이용하여 악성 javascript code가 steganography를 이용하여 숨겨진 이미지가 배너에 사용되었다.

스테가노그래피 기법으로 JPG파일에 숨겨져 있는 랜섬웨어 압축 포멧
openStegano 개발언어: Java(open source) 사용환경: Window, Linux


개발환경: window 10, visual studio 2019 사용언어: c++ 14 프로그램 설명: window bitmap file(.bmp) 형태의 파일에 원하는 message를 숨기고 열어볼 수 있는 프로그램
우선 숨기기를 원하는 최대 500자의 text와 bmp확장자를 가진 이미지가 필요하다. 이미지와 실행파일을 동일한 directory에 위치시키고 아래와 같은 명령을 수행한다. 실행파일의 이름은 stego.exe로 이미지의 이름은 origin.bmp로 지정한다.

window command를 이용한 encoding과 decoding의 모습


origin.bmp와 stego.bmp의 모습
24 비트맵 이미지의 경우, bitmap 이미지 데이터는 offset 0x36인 곳에서부터 blue, green, red 순서로 된 튜플들을 순차적으로 저장하고 있다. 각 색상의 크기는 1바이트. 따라서, 픽셀당 3bytes를 사용한다. 이 각 픽셀이 가진 정보는 2^24(약 1600만개) 가지로, 아주 작은 차이는 사람의 눈으로는 구분이 불가능하다.
이 점을 이용하여 3byte의 마지막 비트를 steganography를 위한 공간으로 활용한다. 따라서 숨길 수 있는 데이터의 크기는 비트맵 헤더파일이 담고 있는 정보중 offset 0x02에 있는 BMP 파일 크기 정보에서 헤더 파일의 전체 크기인 54bytes를 제외한 크기만큼 가능하다.
encoding은 3bytes중에서 가장 마지막 비트마다 message의 binary정보를 순서대로 넣었다.
decoding은 encoding의 반대개념으로, BMP를 탐색하면서 3bytes의 마지막 비트를 차례대로 수집하였다. encoding시에는 다루고자하는 message의 길이르 알수 있었지만, decoding때는 길이를 알수 없어서 최대길이를 1000자로 제한하는 조건을 걸어두어 해결하였다.
bitmap, BMP의 파일 format
| offset(dec) | offset(hex) | 크기 | 목적 |
|---|---|---|---|
| 0 | 0x0 | 2 | BMP 파일을 식별하는 데 쓰이는 매직 넘버: 0x42 0x4D (B와 M에 대한 ASCII 코드 포인트) |
| 2 | 0x2 | 4 | BMP 파일 크기 (바이트 단위) |
| 10 | 0xA | 4 | 비트맵 데이터를 찾을 수 있는 시작 오프셋 (바이트 단위) |
| 14 | 0xE | 4 | 이 헤더의 크기 (40 바이트) |
| 18 | 0x12 | 4 | 비트맵 가로 (단위는 화소, signed integer). |
| 22 | 0x16 | 4 | 비트맵 세로 (단위는 화소, signed integer). |
| 54 | 0x36 | - | 실제 데이터 |
shinywaterjeong.com