Computer Science/Computer Security
[SSS] CPU vulnerabilities and SideChannel Attack
[SSS] CPU vulnerabilities and SideChannel Attack
2025.12.04BOF 같은 버그는 모두 프로그래머가 코드를 잘못 작성해서 발생하는 취약점이다.근데 당연히 취약점 중에는 이런 소프트웨어 버그 말고도 CPU 아키텍처 자체의 구조적 허점을 찌르는 공격 방식도 많음.Meltdown과 Spectre가 그 예시. 설계나 명세의 오류가 아니고, CPU의 성능을 위해 필수적인 기능이기에.. 보안을 위해 기능을 끌 수도 없음. Meltdown 공격자가 데이터를 가져가려면 데이터가 어떻게 저장되고 보호되는지 알아야 한다.운영체제에서 다 다룬 내용이긴 함.. A 프로세스의 주소 공간은 B 프로세스와 완전히 격리되어 있다.그런데 커널 코드와 데이터는 모든 프로세스의 가상 주소 공간에 매핑됨. 커널 데이터가 내 주소 공간에 있다고 읽을 수 있는건 아니긴 함..유저 모드 코드가 커널 메..
[SSS] Hardware-based Security Techniques
[SSS] Hardware-based Security Techniques
2025.11.27포인터 개념을 사용하는 언어에서, 포인터가 NULL(0)을 가리킬 때 해당 주소의 함수를 호출하거나 데이터를 쓰려고 하면 NULL Pointer DeReference가 발생한다. (0x00000000 에 있는 명령어를 실행하려 함) 공격자가 User Space에 있는 0x0 주소 근처에 ShellCode를 심어두면, 커널이 NULL 포인터 버그로 0x0 주소로 점프하면 커널 권한을 가진 상태로 공격자가 심어둔 사용자 영역의 코드가 실행된다. 이 공격을 Return-to-User 공격이라고 부른다. Supervisor Mode Execution Prevention (SMEP) 와 Supervisor Mode Access Prevention (SMAP) 은 CPU 하드웨어 차원에서 커널의 User 메모리 ..
[SSS] Trusted Execution Environment 2
[SSS] Trusted Execution Environment 2
2025.11.24DRM (Digital Right Management) 도 Trust Zone의 활용 예시. Normal World에서 암호화된 영화 파일을 다운로드하지만, 복호화 키가 없어서 내용을 볼 수 없다.Secure World는 숨겨진 복호화 키를 가지고 있다. 안전하게 영상을 복호화하고, Secure World 에서 영화를 보여준다.복호화된 영상을 Normal World에 넘겨주면 커널이 해킹당할 때 원본 영상을 불법 복제 할 수 있다. CPU 내부에는 Secure Configuration Register가 있고, 이 레지스터에서 저장하는 Non-Secure Bit로 현재 상태를 결정한다.값이 1이면 Normal World / 값이 0이면 Secure World 이다. Secure World는 모든 영..
[SSS] OPTEE - Open Portable Trusted Execution Environment
[SSS] OPTEE - Open Portable Trusted Execution Environment
2025.11.20OP-TEE는 ARM 기반의 비영리단체 Linaro에서 배포하는 TrustZone 기술이 적용된 TEE를 구현한 오픈소스를 의미한다.TEE 개념처럼 Normal World / Secure World 두 개의 독립된 환경을 제공하고, ARM 아키텍처를 기반으로 둔다. 인텔 기반 X 각 World간 전환은 ARM 아키텍처에서 애플리케이션 계층 및 OS 계층보다 높은 권한 계층인 EL3에 구현되어 있는 Secure Monitor를 통해서 이루어진다. OP-TEE 빌드하고 탭을 두개 띄우자. 하나는 Normal World 다른 하나는 Secure World Normal World 탭에서 optee_example_hello_world 명령어가 잘 실행됨을 확인할 수 있음.이제 이 예제를 복..
[SSS] Trusted Execution Environment
[SSS] Trusted Execution Environment
2025.11.14기존 시스템에서는 OS Kernel을 Root of Trust로 간주하고 User Program은 메모리 할당 및 하드웨어 제어 작업을 수행할 때 커널을 무조건적으로 신뢰한다.그런데.. 커널 자체에 취약점이 있거나 커널 수준에서 동작하는 루트킷 등 악성코드는 이런 신뢰 모델을 위협함. Trusted Execution Environment (TEE) 는 커널로부터 격리된 안전한 실행 환경을 구축할 때 사용한다.커널이 해킹당하더라도 보안에 민감한 애플리케이션을 보호하고 보안 모니터 역할을 수행한다. 루트킷이 Kernel Space에 설치되고 Security Module을 공격해 보안 조치를 우회한다.하드웨어와의 상호작용에 직접 개입해서 키보드 입력을 가로챌 수도 있고.. System Monitor를..
[SSS] Software Defense
[SSS] Software Defense
2025.11.10Buffer Overflow, Format String Attack 등 Control Flow Hijack을 수행하는 방법을 공부했으니.. 이제 그 공격을 방어하는 방법을 살펴보자. 프로그램 분석, 퍼징 등을 사용해 프로그램에 심어져 있는 잠재적인 버그를 찾는게 가장 좋지만.. 이게 힘들다.버그가 있더라도 공격이 어렵게 만드는 차선택을 선택하자. Stack Canary / Data Execution Prevention / Address Space Layout Randomiztion 등 여러 기법을 사용한다. Data Execution Prevention코드 주입 공격을 방어한다.메모리 영역의 권한을 엄격하게 분리해서, Writable한 공간은 Non-Executable하게 만든다. 프로그램 스택은 W..
[SSS] OS kernel and Rootkit
[SSS] OS kernel and Rootkit
2025.11.01루트킷의 핵심 원리는 Control Flow Hijacking. 정상적인 흐름을 가로채서 악성 코드를 먼저 실행시키는 방식이다. Call write를 호출하면 커널은 sys_write 함수를 찾아 0xca00000으로 이동한다.그런데 루트킷이 먼저 커널에 침투해서 func sys_rootkit() 함수를 0xcafecafe 주소에 올려버린다면? 추가로, 시스템 콜 테이블의 sys_write 항목이 가리키는 주소를 oxcafecafe로 바꿔버리면? 정상적인 sys_write() 함수 대신 sys_rootkit() 함수를 실행하게 된다. 루트킷이 커널에 침투하려면 애초에 User Level 프로그램에서 취약점을 통해 권한을 획득해야 한다.그러니 지금까지 배운 취약점을 사용해 권한을 얻은 후에 루..
[SSS] Race Condition
[SSS] Race Condition
2025.10.20공유 자원의 접근 순서를 적당히 조절하지 않으면 의도하지 않은 결과가 발생할 수 있다.높은 권한을 가진 프로그램이 Race Condition을 가지고 있다면... function withdraw($amount){ $balance = getBalance(); if ($amount 쓰레드1이 $balance를 업데이트 하는 부분까지 실행되고 쓰레드2가 같은 함수를 실행한다.쓰레드2는 쓰레드1이 가져간 잔액과 동일한 양 만큼을 다루기에.. DB를 잘못 업데이트 할 수 있다. 관련 공격으로 TOCTTOU - Time Of Check To Time Of Use 이 있다.간단하게 말하면 파일 사용 전 검증을 수행하고, 검증 후 그 파일을 바꿔버리는 방식이다. Symbolic Link를 사용하자.공..
[SSS] Return Oriented Programming
[SSS] Return Oriented Programming
2025.10.09공격자는 악의적인 코드를 삽입하지 않아도, 정상적인 코드들을 조합해서 악의적인 역할을 수행하도록 조작할 수 있다.(Code Reuse Attack) 스택 영역에 쉘코드를 넣어봤자 데이터 영역은 실행할 수 없다. (Data Execution Prevention)모든 영역에 DEP를 적용하는거는 사실상 힘들다. Writable 영역에서 바로 컴파일해서 실행해야 하는 영역을 활용하기 힘드니까.. 쉘코드를 넣어봤자 해당 부분이 실행 불가능하면 공격 할 수 없다. DEP 환경에서 악성코드를 실행하려면 공격자가 쉘코드같은 악성코드를 넣어놓는게 아니라 이미 있는 코드조각을 잘 조립해서 악성코드를 만들어서 활용해야 한다. 정상적인 스택 구조에서 BOF 공격을 통해 원래 복귀해야 할 주소 대신 공격..
[SSS] Format String Bug
[SSS] Format String Bug
2025.10.06Variadic function은 인자의 개수가 정해져 있지 않은 함수를 의미한다. #include #include void printNumbers(int Narg, ...) { va_list args; va_start(args, Narg); for (int i = 0; i Variadic function을 사용할 때의 스택이다. Narg가 2로 설정된건 int, double의 pair 개수를 의미한다. va_start 매크로로 인자가 시작하는 위치를 찾고va_list 로 가변 인자 목록을 가리키는 포인터 변수를 선언한다.va_arg 로 list 포인터를 type 크기만큼 이동시키며 인자를 꺼낸다. printf에서도 가변 인자를 위와 같은 방식으로 처리한다.%d를 10..
[SSS] Control Flow Hijacking - Shellcode
[SSS] Control Flow Hijacking - Shellcode
2025.09.29Shellcode는 프로그램 내부에서 직접 실행되도록 설계된 바이너리 코드 조각이다.메모리의 어디에 위치하든 동작할 수 있어야 하고, 외부 라이브러리에 의존하지 않는다. 그냥 공격자가 공격 대상의 컴에서 실행하고 싶은 최종 명령어를 기계어로 번역한거라고 보면 됨.공격자 입장에서는 공격 대상의 쉘을 띄우고 싶으니까 이름이 쉘코드임. Assembler로 작성된 후 바이트로 변환되고, 이 바이트들이 메모리에 올라가고, CPU의 실행 대상이 된다. 보통 루트 권한의 쉘을 얻을 때 사용된다. 사용자 영역 (Ring 3) 에서 동작하는 일반 프로세스는 커널이 관리하는 하드웨어 자원에 직접 접근할 수 없다.운영체제에서 배웠듯.. Ring 3에서 RIng 0으로 안전하게 진입해서 커널 서비스를 요청하는 통로라..
[SSS] Control Flow Hijacking - Buffer Overflow
[SSS] Control Flow Hijacking - Buffer Overflow
2025.09.21Buffer Overflow 공격을 위해서 컴퓨터 아키텍처를 알아야 한다.32bit / 64bit/ ARM / Intel / AT&T 등 여러 가지 아키텍처가 있는데.. 어차피 하나만 잘 볼 수 있으면 다른것도 잘 본다. x86은 스택의 Base Pointer를 사용하고 ARM은 Stack Pointer만 사용하고.. 이런식으로 차이가 조금씩 있긴 하지만 필요할 때 찾아보면 됨 MOV EAX 등 기본 어셈블리 명령어, 빅엔디안 / 리틀엔디안 등 데이터 표현법, 데이터의 저장 위치 등은 시스템프로그래밍과 운영체제에서 공부했다. 32bit 기반 리눅스 운영체제에서 스택의 최상위 1GB는 OS 영역으로 할당되고 나머지 3GB가 사용자 영역으로 할당된다. 스택은 컴파일 시 크기를 잡아둘 수 있고, 힙은 ..