[1] 시스템 해킹 기초

 

 

본 글은 DreamHack의 강의 내용을 요약한 글이므로 자세한 내용은 dreamhack.io 에서 학습하시길 바랍니다. 

 

해커들의 놀이터, Dreamhack

해킹과 보안에 대한 공부를 하고 싶은 학생, 안전한 코드를 작성하고 싶은 개발자, 보안 지식과 실력을 업그레이드 시키고 싶은 보안 전문가까지 함께 공부하고 연습하며 지식을 나누고 실력 향

dreamhack.io

 

 

1. 해킹이란? 

 

 컴퓨터 보안에서의 해킹 : 

  • 컴퓨터의 하드웨어나 소프트웨어, 네트워크, 웹사이트 등 각종 정보 체계에서 주어진 권한 이상을 얻거나 의도하지 않은 동작을 일으키는 행위

 

 해킹의 유래 '핵(Hack)' 

  • 특정 문제를 풀거나 비효율적인 시스템을 개선하는 해결책
  • 당시의 해커란 - 창조적 해결책을 제시할 수 있는 고도로 숙련된 프로그래머

 

2. 해킹의 분류 

 분류 기준 :  무엇을 공격 대상으로 삼느냐

분류 공격대상 공격 예
웹 해킹 (Web Hacking)   웹 사이트 타인 계정 정보 탈취
네트워크 해킹 (Network Hacking)  네트워크 트래픽 과부하, 서비스 다운
시스템 해킹 (System Hacking)  소프트웨어 / 프로그램의 약점 권한 탈취

시스템 해킹, 소프트웨어 해킹 강의 추천 : System Exploitation Fundamental

 

3. 해킹의 원리 

해킹은 엄연히 논리와 규칙을 따르며, 그 원리를 자세히 살펴본다면 누구나 이해할 수 있을 정도로 단순함
해킹은 단순히 규칙을 창조적으로 활용해 의도치 않은 결과를 얻어내는 일련의 행위

 

이미지 출처 : dreamhack.io

  • 프로그램은 구현대로만 동작 -> 개발 시 프로그래머는 이러한 예외적인 경우를 처리하는 코드를 직접 작성해야 함
"공부를 열심히 했으니 소원 한 가지를 들어주도록 하마." - 프로그래머가 의도한 행위 (정상)
"그렇다면 소원 100가지를 들어주세요!" - 의도에서 벗어나는 행위 (악의적 행위, 공격)
소원 100가지를 들어주는 것 - 별도의 검증 없이 소원을 수리하는 것 (소프트웨어 취약점)

 

 

4. 취약점이란? 

(1) 개념

 익스플로잇 

  • 취약점을 이용해 공격자가 의도한 동작을 수행하게 하는 코드 혹은 이를 이용한 공격 행위

 소프트웨어 버그 

  • 프로그램이 잘못된 결과를 내거나, 오류를 발생하는 등의 의도치 않은 동작을 수행하게 되는 문제

 소프트웨어 취약점 

  • 공격자가 주어진 권한 이상의 권한을 획득하거나 프로그래머가 의도하지 않은 동작을 수행할 수 있도록 하는 소프트웨어 버그

패치(Patch) 버그픽스(bug fix)

  • 수정 또는 개선을 위해 컴퓨터 프로그램이나 지원 데이터를 업데이트하도록 설계된 일종의 소프트웨어 또는 행위
  • 보안 취약점 및 기타 버그의 수정을 포함

공격자는 단 하나의 취약점만으로도 소프트웨어를 공격할 수도 있다. - 보안은 비대칭 게임

 

 

 

 소프트웨어 취약점 발생 요인 

  • 프로그래머의 실수 
  • 개발자의 잘못된 가정 - 올바른 입력이 들어올 것이라는 잘못된 믿음 > 사용자 입력값에 대한 검증 부재로 이어
    • 실제 사례 : 2014년 OpenSSL HeartBleed 취약점 - 클라이언트에게서 전송받은 데이터의 유효성 검증 부재

좌 : 버그와 취약점의 포함관계 우 : 소프트웨어 버그 분류 및 포함관계

 

(2) 소프트웨어 버그 종류 

분류 기준 : 해당 취약점이 공격자의 의도를 달성하는 데 어느 정도의 영향을 주었는가

 

 소프트웨어 버그 (Bug)

  • 프로그래머가 의도하지 않은 동작 수행

소프트웨어 취약점 (Vulnerability)

  • 소프트웨어 버그 중 보안에 영향을 미칠 수 있는 버그

익스플로잇 가능한 취약점 (Exploitable Vulnerability)

  • 소프트웨어 취약점 중 공격자가 의도한 동작을 수행할 수 있는 버그

안정적으로 익스플로잇 가능한 취약점 (Reliably Exploitable Vulnerability)

  • 익스플로잇이 가능한 취약점 중 매우 높은 확률로 공격에 성공할 수 있는 버그

 

(3) Attack Vector 

모든 소프트웨어 취약점은 소프트웨어와 공격자가 상호 작용하는 곳, 즉 사용자의 입력에서부터 발생

 

 Attack Vector(공격 벡터) :  공격자가 소프트웨어와 상호 작용할 수 있는 곳

 Attack Surface :  Attack Vector들의 집합

이미지 출처 : dreamhack.io

(4) 취약점 종류 2가지

 Memory Corruption 

Buffer Overflow 프로그래머가 할당한 크기의 버퍼보다 더 큰 데이터를 입력 받아 메모리의 다른 영역을 오염시킬 수 있는 취약점
Out-Of-Boundary 버퍼의 길이 범위를 벗어나는 곳의 데이터에 접근할 수 있는 취약점
Off-by-One 경계 검사에서 하나 더 많은 값을 쓸 수 있을 때 발생하는 취약점
Format String printf나 sprintf와 같은 함수에서 포맷 스트링 문자열을 올바르게 사용하지 못해 발생하는 취약점
Double Free / Use-After-Free 동적 할당된 메모리를 정확히 관리하지 못했을 때 발생하는 취약점
Double Free : 이미 해제된 메모리를 다시 한번 해제하려고 시도하는 것
Use-After-Free : 해제된 메모리에 접근해 이를 사용하려고 하는 것

 Logical Bug 

Command Injection 사용자의 입력을 셸에 전달해 실행할 때 정확한 검사를 실행하지 않아 발생하는 취약점
Race Condition 여러 스레드나 프로세스의 자원 관리를 정확히 수행하지 못해 데이터가 오염되는 취약점
Path Traversal 프로그래머가 가정한 디렉토리를 벗어나 외부에 존재하는 파일에 접근할 수 있는 취약점
주로 소스 코드에서 "../"와 같은 경로 문자를 검사하지 않아 발생

 

5. 보호 기법 (Mitigation) 

기본적으로 취약점은 존재한다는 전제하에 시스템을 보호하는 방법

이미지 출처 : dreamhack.io

 Stack Smashing Protector(SSP) 

  • Buffer Overflow에 대한 보호 기법
  • Buffer Overflow의 뒤에 넣어둔 랜덤 값을 특정 시점에 검사하여 버퍼 오버플로우 발생 탐지
  • 공격 발생 시 프로그램 강제 종료

 

모든 출처 : 시스템 해킹 기초 (DreamHack, dreamhack.io/learn/13)

 

'Study > DreamHack : Pwnable' 카테고리의 다른 글

[5] puts("hello world!\n"); → x86_64 asm  (0) 2021.06.14
DreamHack 수강 커리큘럼  (0) 2021.05.15
[4] Web Hacking  (0) 2021.05.13
[3] x64 기초 ( feat. 어셈블리 코드 )  (0) 2021.05.12
[2] 리버스 엔지니어링이란?  (0) 2021.05.12