SSP(Stack Smashing Protector)SSP는 BOF를 방어하기 위한 보호기법 중 하나로 함수를 실행할 때, canary라는 랜덤 값을 스택에 추가하여 BOF로 스택 데이터가 변조됐는지 확인하는 방법이다. canary가 변조된 경우는 스택 데이터가 변조됐다고 판단하고 프로그램을 종료한다. └─# checksec ssp_chk [*] '/root/ssp_chk' Arch: i386-32-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x8048000)SSP가 바이너리에 적용됐는지 확인하는 방법은 checksec 명령을 이용하는 방법이다.“..
ROP(Return Oriented Programming)ROP는 ASLR과 같은 메모리 보호기법을 우회하기 위한 공격기법으로 return이 포함된 코드 조각들인 가젯들을 이용해 system(“/bin/bash”)를 실행하는 프로그램을 해커가 임의로 만들어서 root의 권한을 얻어내는 해킹 기법이다. ROP 이해를 위한 예제를 준비했다. ROP 체인으로 setresuid(0,0,0)와 system("/bin/sh")를 연속으로 실행하는 예제를 이해해보자. 대표적으로 자주 사용하는 pop rdi; ret 가젯과 pop rsi; pop rdx; ret 가젯을 활용한 예제다. BOF로 스택에 가젯과 인자들을 덮어썼다는 전제로 만든 메모리 구조다. 가젯이 실행될 때마다 스택이 어떻게 바뀌는지 확인해보자. 함수가..
Tcache PoisoningDouble Free Bug를 이용하여 tcache_entry를 조작하고 이미 할당된 메모리에 다시 힙 청크를 할당하는 공격 기법이다. tcache에서 사용하는 tcache_put과 tcache_get 함수에서는 old와 p를 검증하지 않기 때문에 한 개의 청크를 연속으로 해제할 수 있다.참고로 GLIBC 2.26과 2.29 이상의 버전에서는 DFB를 검증하는 로직이 추가됐다. 기본적으로 크기가 32byte ~ 1040byte 크기를 갖는 청크들의 경우에는 tcache에 보관한다. tcache poisoning을 이해하기 위해서는 청크 개념을 알아야 한다. [사진]의 왼쪽은 alloc 청크, 오른쪽은 free 청크다. 차이점은 alloc 청크에서는 data를 담는 부분이 fr..
Use After Free (UAF)Use After Free (UAF) 취약점은 프로그램이 메모리를 해제한 후에도 해당 메모리 위치를 계속 사용하는 경우 발생하는 보안 취약점이다. 운영 체제는 메모리를 효율적으로 사용하기 위해 동일한 크기의 메모리를 재할당할 때 종종 이전에 해제된 메모리 영역을 재사용한다. 만약 메모리를 해제하는 과정에서 데이터가 제대로 지워지지 않으면, 재할당된 포인터가 이전 데이터를 참조하게 되어 문제가 발생한다. 다음은 UAF 취약점을 설명하는 간단한 C++ 예제다.#include #include class Vulnerable {public: char* data; Vulnerable(size_t size) { data = new char[size]; ..
안녕하세요. 2023년 7~8월에 금융보안원에서 진행한 금융보안아카데미 1기 후기 글을 남기려고 합니다. 이 글을 읽는 분들은 차후 금융보안아카데미에 지원하실 분들이나 금융보안원 입사에 관심 있으신 분들이 되겠네요. 자세한 이야기를 하기에 앞서, 금융보안아카데미의 장점을 얘기해 보겠습니다. 일단 금융보안원 입사에 관심 있는 인원들을 대상으로 교육하는 만큼 금융보안원에서 근무하고 계신 현직자분들과 소통할 기회를 얻는 점이 가장 큰 장점이라고 생각합니다. 현직자와의 인적 네트워크를 쌓을 수 있는 기회가 제공되는 만큼 금융보안원 입사에 관심이 있으시다면 매우 큰 도움이 되겠죠? 또한 금융보안원이라는 이름에 걸맞게 투자가 확실히 많다는 느낌이었습니다. 교육생들을 위한 식사 제공이나 회식 등등 돈을 아끼지 않고 ..
IDA lumina 서버IDA lumina 서버는 코드를 분석하는 과정에서 심볼 정보를 임의로 제공받아 분석을 좀 더 용이하게 할 수 있게 도와주는 서버입니다. lumina 서버는 알려진 함수들의 시그니처 정보가 저장된 서버로, 사용자는 시그니처를 공유하거나 모르는 함수에 대한 정보를 공유받을 수 있습니다. 따라서 심볼을 제공받지 못했거나 처음 보는 복잡한 코드를 쉽고 원활하게 분석 할 수 있도록 도움을 줍니다. 저는 나름대로 도움 받고 있다고 생각해서 공유하고자합니다. 다음은 IDA에서 lumina 서버를 사용하는 방법입니다. https://abda.nl/lumen/ LumenAlternative Lumina server for IDA Pro - Allows users to pull function m..