Security(15)
-
32bits 아키텍처와 64bits 아키텍처
32비트 아키텍처에서는 4bytes로 align => system 함수 사용시 align 필요 X 64비트 아키텍처에서는 8bytes로 align 32비트 아키텍처에서는 stack에 쌓인 순서로 arguments 관리 64비트 아키텍처에서는 레지스터(rdi, rsi, ...)로 arguments 관리 참고 블로그 https://sean.tistory.com/410
2023.11.15 -
[System Hacking] Bypass NX & ASLR
ASLR (Address Space Layout Randomization) ASLR은 바이너리가 실행될 때마다 스택, 힙 공유 라이브러리 등을 임의의 주소에 할당하는 보호 기법이다. cat /proc/sys/kernel/randomize_va_space 위와 같은 명령어를 통해 ASLR이 적용되는지 확인할 수 있다. 위 명령어의 결과값은 0, 1, 2로 나뉘는데 각 값의 의미는 다음과 같다. 0 : No ASLR 1 : Conservative Randomization(stack, heap, lib, vdso etc) 2 : Conservative Randomization + brk(allocated memory by brk) ASLR의 특징으로는 1. main함수의 영역은 고정됨 2. 라이브러리 매핑 주..
2023.08.29 -
[System Hacking] Stack Canary
카나리 보호 기법은 함수의 프롤로그에서 스택 버퍼와 반환 주소 사이에 임의의 값을 삽입하고, 함수의 에필로그에서 해당 값의 변조를 확인하는 보호 기법이다. 이를 통해 반환 주소를 덮어 쓰는 스택 버퍼 오버플로우 공격로부터 보호할 수 있다. 기본적으로 gcc컴파일러는 카나리를 적용하여 컴파일한다. 카나리를 비활성화하기 위해서는 -fno-stack-protector 옵션을 추가하면 된다. (비활성화해도 segmentation fault가 발생한다.) canary 값은 32비트 아키텍처에서는 4바이트, 64바이트 아키텍처에서는 8바이트로 gs:0x14 또는 fs:0x28 에 저장된 값이 사용된다. (해당 레지스터들은 Thread Local Storage, TLS라는 포인터로 사용) 레지스터에 저장된 값은 리눅..
2023.07.25 -
CAN 데이터 페이로드 분석
대략 21만개의 주어진 CAN 데이터를 갖고 어떤 공격이 이루어졌는지 분석해보았다. 우선 dataset을 입력으로 받아서 어떤 공격이 있는지 탐지하는 소스코드를 작성했다. 먼저 asc파일로부터 한줄씩 읽어 timestamp와 CAN ID를 파싱했다. 그리고 주입된 메시지인지 확인하는데 해당 CAN ID의 가장 마지막 메시지의 timestamp와 현재 timestamp의 차를 구해 해당 CAN ID의 time interval과 비교했고, 만약 time interva보다 작으면 주입된 메시지라고 판단한다. 다음에는 DoS attack인지 확인한다. 가장 마지막 메시지의 timestamp와 현재 timestamp의 차를 구해 DOS_INTERVAL과 비교한다. 만일 DOS_INTERVAL 보다 작으면 DoS_..
2023.07.24 -
[논문 분석] Intrusion Detection System Based on the Analysis of Time Intervals of CAN Messages for In-Vehicle Network
본 논문은 CAN 통신 간에 발생할 수 있는 injection attack 을 탐지하는 IDS를 설계하는 것을 목표로 하고 있다. 이미 소개되어 있는 기존의 IDS들의 경우 탐지하는 데에 delay가 존재하기 때문에 실시간 탐지 및 대응을 하기에는 제한적이기 때문에 본 논문에서는 간단한 알고리즘을 사용하여 설계한 IDS를 통해 실시간 탐지 및 대응을 하고자 한다. 본 논문에서 소개하고 있는 공격자 모델은 다음과 같은 3가지 유형이 존재한다. 1. Injecting specific messages of single CAN ID 2. Injecting random or pre-ordered messages of multiple CAN IDs 3. Injecting messages massively to di..
2023.07.24 -
[System Hacking] Stack Buffer Overflow
Calling Convention x86 아키텍처에서 gcc에 대한 함수 호출 규약은 cdecl을 사용 x86-64 아키텍처에서 gcc에 대한 함수 호출 규약은 SYSTEM V를 사용 x86 아키텍처는 레지스터 수가 적어서 함수의 인자를 스택에 올리고, x86-64 아키텍처에서는 레지스터 수가 많아서 함수의 인자를 레지스터에 올린다. (인자의 수가 6개가 넘어가면 스택을 사용 => 레지스터에 비해 느림) 사용되는 레지스터는 rdi, rsi, rdx, rcs, r8, r9 반환값은 rax에 전달 Stack Buffer Overflow stack overflow : 스택 영역을 벗어나 오버플로우가 발생 buffer overflow : 의도한 버퍼를 넘어 오버플로우가 발생 스택 버퍼 오버플로우를 통해 중요 데..
2023.07.16