본 포스팅은 DreamHack 사이트의 시스템 해킹 기초 강의 내용을 요약한 것입니다.
이 글은 저의 취향에 맞춘 정리글이므로 Dreamhack 사이트의 내용을 보시기 바랍니다.
해커들의 놀이터, DreamHack
해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향상을 할 수 있는 공간입니다.
dreamhack.io
해킹의 분류
1. 웹 해킹: 웹 사이트를 공격함
2. 네트워크 해킹: 네트워크를 공격함
3. 시스템 해킹: 프로그램의 약점을 공격함
해킹: 단순히 규칙을 창조적으로 활용해 의도치 않은 결과를 얻어내는 일련의 행위
소프트웨어 버그: 프로그램이 잘못된 결과를 내거나, 오류를 발생하는 등의 의도치 않은 동작을 수행하게 되는 문제
소프트웨어 취약점: 공격자가 주어진 권한 이상의 권한을 획득하거나 프로그래머가 의도하지 않은 동작을 수행할 수 있도록 하는 소프트웨어 버그
소프트웨어 취약점이 발생하는 원인
-프로그래머의 실수
-개발자의 잘못된 가정(항상 올바른 입력이 들어올 것이라는 잘못된 믿음)
ex) 하트블리드 취약점
Exploit: 취약점을 이용해 공격자가 의도한 동작을 수행하게 하는 코드 or 이를 이용한 공격행위
소프트웨어 버그의 분류
Bug: 프로그래머가 의도하지 않은 동작 수행
Vulnerability: Bug 중 보안에 영향을 미칠 수 있는 Bug
Exploitable Vunerability: 취약점 중 공격자가 의도한 동작을 수행할 수 있는 Bug
Reliably Exploitable Vunerability: Exploite 가능한 취약점 중 매우 높은 확률로 공격에 성공할 수 있는 버그
Attack Vector: 공격자가 소프트웨어와 상호 작용할 수 있는 곳
ex) 입력창
Attack Surface: Attack Vector의 집합
취약점의 분류
1. 메모리 커럽션 취약점: C/C++과 같은 저수준 언어에서 메모리를 조작해 공격
-Buffer Overflow: 프로그래머가 할당한 크기의 버퍼보다 더 큰 데이터를 입력받아 메모리의 다른 영역을 오염시킬 수 있음
-Out Of Boundary: 버퍼의 길이범위를 벗어나는 곳의 데이터에 접근할 수 있는 취약점
-Off by One: 경계 검사에서 하나 더 많은 값을 쓸 수 있을 때 발생하는 취약점, 반복문을 순회할 때 잘못된 비교연산자를 사용하거나 인덱스가 0부터 시작하는 것을 고려하지 못했을 때 자주 발생
-Format String Bug: printf/scanf와 같은 함수에서 포멧 스트링 문자열을 올바르게 사용하지 못해 발생
-Double Free / Use After Free: 동적 할당된 메모리를 정확하게 관리하지 못했을 때 발생
-etc...
2. 로지컬 취약점: 메모리를 조작할 필요 없이 공격 가능
-Command Injection: 사용자의 입력을 셸에 전달해 실행할 때 검사를 실행하지 않아 발생
-Race Condition: 여러 스레드나 프로세스의 자원 관리를 정확히 수행하지 못해 데이터가 오염됨.
-Path Traversal: 프로그래머가 가정한 디렉토리를 벗어나 외부에 존재하는 파일에 접근할 수 있는 취약점.
-etc...
미티게이션: 취약점의 공격을 어렵게 만드는 일을 함.
ex) Stack Smashing Protector(SSP) 버퍼 오버플로우 방지
'Hacking-기초 > Pwnable' 카테고리의 다른 글
Linux Exploitation & Mitigation Part 1 (1) (1) | 2020.04.13 |
---|---|
Memory Corruption - C (2) FSB 문제해설 (1) | 2020.04.11 |
Buffer Overflow Attack 기초(1) (0) | 2020.04.11 |
Memory Corruption - C (2) (1) | 2020.04.11 |
Memory Corruption - C (1) (0) | 2020.04.11 |