본문 바로가기

보안

(12)
[자동차해킹] 1. UNDERSTANDING THREAT MODELS Finding Attack Surfaces데이터가 차량에 들어올 수 있는 모든 방법, 즉 차량이 외부 세계와 통신하는 모든 방법을 알아야 한다. > 차량 외부 조사 시 확인할 것- 신호가 어떻게 수신되나? 전파? Key fobs? 거리 센서?- 물리적 키패드 접근이 있나?- 터치나 모션 센서가 있나?- 전기차면, 어떻게 충전되나? > 차량 내부 조사 시 확인할 것- 오디오 입력 옵션은 무엇이 있나? CD? USB? Bluetooth?- 진단 포트가 있나?- 대시보드의 기능은 무엇인가? GPS? Bluetooth? Internet? 이렇게 다양한 방법으로 들어오는 데이터가 잘못되었거나 악의적이라면? -> threat modeling 필요 Threat Modeling- 위협 모델링을 할 때는 목표의 아키텍처..
[시스템해킹] PIE ASLR이 적용되면서 바이너리 실행 시마다 스택, 힙, 공유 라이브러리 등이 무작위 주소에 매핑되었지만 main의 주소는 항상 동일했음-> 고정된 주소의 코드 가젯을 활용한 ROP 공격이 가능했음 PIE(Position-Independent Executable): ASLR이 코드 영역에도 적용되게 해주는 기술PIC(Position-Independent Code)- 리눅스에서 ELF는 실행 파일(executable)과 공유 오브젝트(shared object, SO)로 두 가지 존재- 공유 오브젝트는 기본적으로 재배치가 가능하도록 설계 -> 메모리의 어느 주소에 적재되어도 코드의 의미가 훼손되지 않음  => 이런 성질의 코드를 PIC라 함 PIE(Position-Independent Executable)- ..
[시스템해킹] Return Oriented Programming(ROP); ret2main 함수 실행 후 main으로 다시 돌아가게 가젯 구성; GOT overwrite 안해도 쉘 획득 가능임  basic_rop_x86-> 이번엔 32비트임, canary X 32비트 함수 호출 규약- rdi, rsi 등 레지스터로 인자를 전달해주던 64비트와 달리 32비트는 스택으로 전달해줌- x86 바이너리에서 pop 명령어의 피연산자는 중요하지 않다고.. - 인자 2개 필요하면 pop; pop; ret 이런 가젯을 찾아야 한다고.. 익스플로잇       - puts_plt 구해서 read 함수 실제 주소 구하고 main으로 return- x86 함수 호출 규약 알아야 함- 함수 인자 개수만큼 pop 필요- 지금 보니까 ret 가젯은 필요 없고- 첫번째 payload로 구한 read 주소를 이용해 libc ..
[시스템해킹] Return Oriented Programming(ROP); GOT Overwrite - ASLR이 걸린 환경에서 system 함수를 사용하려면 프로세스에서 libc가 매핑된 주소를 찾고, 그 주소로부터 system 함수의 오프셋을 이용하여 함수의 주소를 계산해야 함 ROP: 리턴 가젯을 사용하여 복잡한 실행 흐름을 구현하는 기법 코드// Name: rop.c// Compile: gcc -o rop rop.c -fno-PIE -no-pie#include #include int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Leak canary puts("[1] Leak Canary"); write(1, "Buf: ", 5); //..
[시스템해킹] Return to Library Return to Library: 라이브러리 함수로 NX를 우회하고 셸을 획득하는 공격 기법 rtl.c// Name: rtl.c// Compile: gcc -o rtl rtl.c -fno-PIE -no-pie#include #include #include const char* binsh = "/bin/sh";int main() { char buf[0x30]; setvbuf(stdin, 0, _IONBF, 0); setvbuf(stdout, 0, _IONBF, 0); // Add system function to plt's entry system("echo 'system@plt'"); // Leak canary printf("[1] Leak Canar..
[시스템해킹] Background: Library 라이브러리(Library) : 컴퓨터 시스템에서 프로그램들이 함수나 변수를 공유해서 사용할 수 있게 함 ex) printf, scanf, strlen, memcpy, malloc 등 - 같은 함수를 반복적으로 정의해야 하는 수고를 덜 수 있어 코드 개발의 효율이 높아짐 링크(Link) : 컴파일의 마지막 단계 - 프로그램에서 어떤 라이브러리의 함수를 사용하면, 호출된 함수와 실제 라이브러리의 함수가 링크 과정에서 연결됨 - 리눅스에서 C 소스 코드는 전처리, 컴파일, 어셈블 과정을 거쳐 ELF 형식을 갖춘 오브젝트 파일(Object file)로 번역됨 - 오브젝트 파일은 실행 가능한 형식을 갖추지만, 라이브러리 함수들의 정의가 어디 있는지 알지 못하므로 실행 불가능 동적 링크: 동적 라이브러리를 링크하는..
[시스템해킹] NX & ASLR NX(No-eXecute): 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법 인텔-XD(eXecute Disable), AMD-NX, 윈도우-DEP(Data Execution Prevention, ARM-XN(eXecute Never) - 코드 영역에 쓰기 권한이 있으면 공격자는 코드를 수정하여 원하는 코드가 실행되게 할 수 있고, - 스택, 데이터 영역에 실행 권한이 있으면 system 함수 등을 실행시켜 공격을 시도할 수 있음 - CPU가 NX를 지원하면 컴파일러 옵션을 통해 바이너리에 NX를 적용할 수 있으며, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받음 - NX가 적용된 바이너리는 코드 영역 외에는 실행 권한이 없음 ASLR(Add..
[시스템해킹] Background: Calling Convention(함수 호출 규약) 함수 호출 규약: 함수의 호출 및 반환에 대한 약속 - 함수에서 다른 함수를 호출할 때, 프로그램의 실행 흐름은 다른 함수로 이동 - 호출한 함수가 반환하면 다시 원래의 함수로 돌아와 기존의 실행 흐름대로 - 함수 호출 시 반환 이후를 위해 호출자(Caller)의 상태(Stack frame) 및 반환 주소(Return Address)를 저장해야 함 - 호출자는 피호출자(Callee)가 요구하는 인자를 전달해줘야 하며, 피호출자의 실행이 종료될 때 반환 값을 전달받아야 함 CPU 아키텍처에 따라, 컴파일러에 따라 호출 규약이 다를 수 있음 x86-64 아키텍처에서는 MSVC(컴파일러)는 MS x64 호출 규약 적용, gcc는 SYSTEM V 호출 규약 적용 x86-64 호출 규약: SYSV 1. 6개의 인..