정보보안 16

MFC 프레임워크 기반 앱 시작지점

#MFC #리버싱 #Reversing MFC 프레임 워크 기반 앱의 경우, MFC 에서 선언 해놓은 클래스들을 상속 받아서 사용자 클래스를 정의하는 식의 개발이 이루어진다. 그만큼 MFC 프레임 워크에서 기본적으로 제공해주는 기반이 상당한데, 최근 MFC 관련 앱을 리버싱해본 결과 리버싱 과정에서도 그러한 기반 클래스들이 어떻게 동작하고, Dialog 까지 생성하는지 등등 알아야할 것이 많아보였다. 흔히 금방 찾을 수 있는 main 함수의 경우에도 함수 vtable 어딘가에 심볼이 깨진채로 들어가있어서 정적분석으로는 금방 가늠하기 어렵고, 동적분석으로 해당 함수를 찾아야한다고 판단하였다. 수 많은 문서를 탐색하면서 main 포인트를 찾는 과정을 간략히 정리해보겠다. int start() { _securi..

중국발 문서형 이력서 악성코드 - 2. 유니버셜 쉘코드편 (Universial Shellcode)

#악성코드분석 #중국 #문서형 악성코드 MD5 HASH Dropper: 59e08d42ce495f290c4dfd7be9614f786cdfed3ebdd7d6e68accbb630c051083 Core Malware: fa1f9f5deac24c735baa77eb5b76b9057b3fea6c2bc7f2bf7f16420a8b48f00c 주요 사용기법 Document Template Injection, Universial Shellcode Drop URL http://xiaodi8.com/1.dotm?raw=true (현재폐쇄) 지난 글 에 이어서 쓴다. 중국발 문서형 이력서 악성코드 - 1. 드로퍼&매크로편 #악성코드분석 #중국 #문서형 악성코드 MD5 HASH Dropper : 59e08d42ce495f290c..

2020 상반기 정보보호병 사는이야기 - 1

필자는 우선 1월13일 입대자로 어느덧 입대 반년을 바라보고있다. 약 1달간의 훈련소를 마치고 정보통신학교에서의 후반기교육을 받는데 사실 배우는건 크게 어려운건 없다. 그냥 훈련소에서 힘들었던거 조금 충전한다는 생각으로 자대배치 날까지만 기다렸었다. 아무래도 정보보호병이 예전같진 않은지 내 기수의 정보보호병들은 나를 포함해서 군단아니면 사단으로 빠졌다. (예전같았으면 국직, 육직 부대로 자주 빠지는 편이었다.) 나름 그래도 면접 1등 먹어놓고 높은 부대 가기를 약간은 기대했었는데 애석하게도 우리나라 부대의 대부분은 사단 또는 군단이었고 나 또한 수많은 평범한 정보보호병 중 한 명이었을뿐이다. 그래도 사단에서 정보보호병으로써의 삶이 그렇게 나쁘지않았다. 오히려 나는 내가 원한 군생활인 것 같아서 좋았다. ..

<사는이야기> 2020.06.28

[RSA 이해를 위한 몸부림 - 3] RSA 암호화 간단히 이해

RSA 암호화 RSA는 공개키 암호화 방식중 하나이다. 우선, 암호화 하는데에 KEY가 필요하겠다. 키는 총 두 가지의 KEY가 관여하는데 하나는 공개키, 하나는 개인키(비밀키)이다. 먼저 이 KEY들이 어떻게 만들어지는지 보자. 1. KEY 우선 공개키. 임의의 서로소인 수 p, q를 정하자. 그리고 n = p * q Φ(n) = (p-1) * (q-1)이라 하자. (Φ는 "파이" 라고 읽으면 된다) 그리고 1 < e < Φ(n) 이면서 Φ(n)과 서로소인 e를 정한다. 여기까지 잘했다면 공개키는 두 수 n과 e의 조합인 로 정할 수 있다. 다음은 개인키. 여기서 이전에 설명했던 모듈러 연산 및 역원이 쓰이는데 공개키 e와 곱해져서서 Φ(n)으로 나눴을 때 나머지가 1이 되는 d가 개인키에 이용된다. ..

[RSA 이해를 위한 몸부림 - 2] 모듈러 연산

모듈러 연산 모듈러 연산은 간단히 말하면 나머지를 구하는 연산이라고 볼 수 있다. 위 식에서 a는 피제수, b는 제수, c는 나머지 이다. 예를 들면, 26 mod 5 = 1 이 될 수 있을 것이다. 이해 되었다면 이제 모듈러 연산의 여러 특징을 정리하려 한다. 1. 합동 모듈러 연산에서 26 mod 5 나 36 mod 5 는 모두 똑같이 1로 같다. 이를 합동 이라는 개념으로 부를 수 있으며 표현은 이와 같이 한다. 1 ≡ 6 ≡ 26 ≡ 36 mod 5 = 1 2. 성질 모듈러 연산에는 아래와 같이 좌변의 덧셈과 곱셈에 대해 분해할 수 있는 성질이 있다. [1] (a + b) ≡ ((a mod n) + (b mod n)) mod n [2] (a * b) ≡ ((a mod n) * (b mod n)) ..

[System32.kr] RSA101

RSA101 #Crypto #RSA Algorithm #Inverse System32.kr 워게임의 메인컨텐츠로 보이는 Crypto 문제의 서막이다. RSA 문제 시리즈가 여러가지가 있는데 그에 대한 첫 단추를 꿸 수 있는 문제로 보인다. 이와 동시에 RSA공부도 시작할 수 있을 것 같다. RSA에 대한 것은 따로 정리하고 문제풀이에 관해서만 핵심적으로 정리하겠다. 우선 문제파일은 paste bin에 올라온 이 텍스트 파일이다. RSA에 필요한 서로소인 수 p,q 와 공개키 e, 그리고 암호화 된 데이터 c가 들어있다. 여기서 개인키 d를 추출해서 복호화 하면 될 것 같다. 참고로 원래 데이터인 M은 이러한 구조로 복호화 가능하다. 문제풀이를 위해 파이썬 Crypto 모듈을 이용했다. 모듈러 연산 시, ..

[ Reversing.kr ] Ransomware

Ransomware #crack me #custom crypto 오랜만에 reversing.kr 을 풀어보았다. 랜섬웨어라고 하는데... key를 알맞게 입력하면 압축파일로 같이 준 file을 올바르게 복호화 해주나보다. (키 값의 옳고 그름에 관계없이 일단 어떤 연산을 거쳐 복호화 해주긴한다.) 일단 처음 바이너리는 UPX로 패킹되어있다는 것을 알 수 있다. upx 언패커로 패킹을 해제하고... IDA에 올려보면 hex ray를 방해하기 위한 용도인지 쓸데없는 쓰레기 코드들이 있다. 그래서인지 main함수가 너무 크다며, 디컴파일이 안된다. 고민을 하다가 idc 함수를 이용해서 다 nop 처리 후, main함수 프롤로그를 옮기기로 하였다. 아래는 패치코드이다. addr=0x4135F4 end_addr=..

[Pwnable.xyz] UAF

UAF #pwnable.xyz #not UAF #overwrite #heap 배점에 비해 쉬웠던 문제. 핵심만 언급하려한다. 결론적으로 본 문제는 UAF를 이용하지 않아도 된다. UAF로 풀이하는 루트도 있을런지는 모르겠지만 필자는 그냥 overwrite를 이용해서 문제를 풀었다. 바이너리의 기능은 총 5가지이다. 게임을 시작하거나, 저장하거나, 지우거나, 게임이름을 출력하거나, 게임 이름을 수정하거나... 여기서 게임은 단순히 두 숫자를 받아서 xor한 값을 특정 heap영역에 저장하는 행동을 한다. 이 문제의 목표는 win 함수를 실행 시키는 것 같다. 우선 IDA로 보면 바이너리 실행직후, initialize_game 함수를 통해 특정 heap영역과 data영역을 구성한다. 구조는 대략 이러하다. ..

[Pwnable.xyz] GrownUp

GrownUp #pwnable.xyz #baby_fsb 오랜만에 pwnable.xyz 를 하였다. 몸풀기로 낮은 점수의 GrownUp 문제를 풀어보았다. 플래그는 바이너리에 내장되어있다고 한다. 바이너리 문자열을 검색해보면 진짜로 플래그 (물론 페이크 플래그)가 내장되어있다. 0x601080 이 주소를 기억하라. PIE가 적용되어있지 않아서 이 data영역의 주소는 서버에서도 동일하게 매핑되어있을 것이다. 바이너리 실행결과는 이렇다. 봐야할 주요부분은 main함수이다. 처음에는 setup 함수가 실행된다. setup 함수는 ... data영역의 0x601160 부분에 %s\n 문자열을 넣는다. 후에 0x601160은 main함수의 printf의 서식문자로 이용된다. 그리고 y or N에 대한 응답을 re..

[System32.kr] Warm Up

Warm Up #pwnable #system32.kr #file descriptor 새로운 워게임 사이트를 찾았다! 암호학 위주여서 매우 관심이 간다 ㅎㅎ 첫 단추를 어떤 문제로 풀어볼까 하다가 Warm Up 이라는 pwnable 문제를 찾았다. 파일 디스크립터를 이용하는 문제 같다. 처음에는 파일 디스크립터를 overwrite 하는 종류의 문제인가 했으나 의외로 간단했다. 다만 strip 이 적용된 상태라 glibc 함수들을 일일히 인지하고 복구하는 과정에 약간의 난항이 있다. 우선 위처럼 메뉴가 주어지고 특정 파일을 open하고 읽거나 삭제할 수 있다. 디컴파일 해보니 31337 이라는 숨겨진 커맨드가 있었다. 이 함수는 /home/strange_file/flag 파일내용을 임의의 string 테이블..

반응형