# 보안 취약점과 해킹 * 보안: 기밀성, 무결성, 가용성을 보장하는 행위 * 정보 보안의 3요소 기밀성(Confidentiality) ex) 암호학 무결성(Integrity) ex) 해시 가용성(Availability) 언제든지 실행 가능 - 보안 취약점: 정보 자산이 갖고 있는 허점으로 정보 보안의 3요소 중 최소 한 가지 이상에 영향을 미치는 취약점 해커: 취약점을 가지고 공격을 함 우리: 취약점을 방어해야 함 # 해킹의 기초 단계 ① 정보수집: 정찰 / 스캐닝 및 취약점 분석 ex) 축구로 따지자면 상대편을 탐색하는 것 ② 침투 및 시스템 장악: 침투(gainning access) ③ 공격 전이 권한 상승 ex) 관리자 권한 획득 백도어 관리 흔적 지우기 # HTTP에 대한 이해 1. 서버가 준비..
x86 Assembly🤖: Essential Part(2) # 서론 - 운영체제의 핵심 자료구조인 스택, C언어의 함수에 대응되는 프로시저, 그리고 시스템 해킹의 관점에서 매우 중요한 시스템콜과 관련된 어셈블리를 배움 스택: push, pop 프로시저: call, leave, ret 시스템콜: syscall # x86-64 어셈블리 명령어 1. Opcode: 스택 🧱 - x64 아키텍처에서는 다음의 명령어로 스택을 조작할 수 있음 push val // val을 스택 최상단에 쌓음 스택은 확장 될 때 기존 주소보다 낮은 주소로 확장되기 때문에 아래로 자람 pop reg // 스택 최상단의 값을 꺼내서 reg에 대입 2. Opcode: 프로시저 📜 - 프로시저(Procedure): 특정 기능을 수행하는 코드..
x86 Assembly🤖: Essential Part(1) # 서론 - 컴퓨터 속에는 복잡한 논리적 인과관계가 존재하고, 여러 개체가 상호작용하며, 그 세계에서 통용되는 기계어(Machine Code)가 있음 - 해커가 하는 일은 그 거대한 세계의 허점을 공격하여 시스템을 장악하는 것 - 시스템 해커: 컴퓨터의 언어로 작성된 소프트웨어에서 취약점을 발견해야 함 - David Wheeler: EDSAC을 개발하면서 어셈블리 언어(Assembly Language)와 어셈블러(Assembler)라는 것을 고안 - 어셈블러(Assembler): 일종의 통역사, 개발자들이 어셈블리어로 코드를 작성하면 컴퓨터가 이해할 수 있는 기계어로 코드를 치환 > 어셈블리어가 기계어보다는 인간이 이해하기 쉬웠으므로, 개발자들은..
Background: Linux Memory Layout # 서론 - 컴퓨터는 크게 CPU와 메모리로 구성되어 있음 - CPU는 실행할 명령어와 명령어 처리에 필요한 데이터를 메모리에서 읽고, Instruction Set Architecture(ISA)에 따라 이를 처리함. 그리고 연산의 결과를 다시 메모리에 적재 > 이는 CPU의 동작과 메모리 사이에 밀접한 연관이 있음을 의미 - 만약 공격자가 메모리를 악의적으로 조작할 수 있다면 조작된 메모리 값에 의해 CPU도 잘못된 동작을 할 수 있음 - 이것을 메모리가 오염되었다고 표현하며, 이를 유발하는 취약점을 메모리 오염(Memory Corruption) 취약점이라고 부름 - 시스템 해킹에 다양한 기법들이 있지만, 많은 공격 기법이 Memory Corru..
Background: Computer Architecture # 서론 - 컴퓨터는 각자 다른 기능을 수행하는 여러 부품들의 도움으로 작동 - CPU: 컴퓨터 작동에 핵심이 되는 연산을 처리하고, 저장 장치는 데이터를 저장 - 이외에도 GPU는 그래픽 데이터를, 랜카드는 네트워크 통신을, 사운드 카드는 소리 데이터를 처리하는 것에 특화되어 있음 - 각 부품들은 특징이 뚜렷하여 컴퓨터에서 고유의 기능을 수행함 - 서로 다른 부품들이 모여서 '컴퓨터'라는 하나의 기계로서 작동할 수 있는 것은 컴퓨터에 대한 기본 설계가 존재하기 때문 > 설계에 맞춰서 여러 하드웨어가 개발되고, 이들을 조립해서 컴퓨터가 완성됨 > 컴퓨터 과학에서는 이러한 설계를 '컴퓨터 구조(Computer Architecture)'라고 부름 ..
Background: Non-Relational DBMS # 들어가며 - 서론 - RDBMS: 스키마를 정의하고 해당 규격에 맞는 데이터를 2차원 테이블 형태로 저장 > 복잡할 뿐만 아니라, 저장해야 하는 데이터가 많아지면 용량의 한계에 다다를 수 있다는 단점이 있음 > 이를 해결하기 위해 등장한 것이 비관계형 데이터베이스 Non-relational DBMS(NRDBMS, NoSQL) - 관계형 데이터베이스에서 발생할 수 있는 문제점으로 SQL Injection이 있었음 > 공격자는 이를 통해 데이터베이스의 정보를 알아내거나 임의의 결과를 반환해 인증을 우회하는 등의 행위가 가능함 > NoSQL 또한 이용자의 입력값을 통해 동적으로 쿼리를 생성해 데이터를 저장하기 때문에 이와 같은 문제점이 발생할 수 있..
ServerSide: SQL Injection # 들어가며 - 서론 - DBMS에서 관리하는 데이터베이스에는 회원 계정, 비밀글과 같이 민감한 정보가 포함되어 있을 수 있음 - 공격자는 데이터베이스 파일 탈취, SQL Injection 공격 등으로 해당 정보를 확보하고 악용하여 금전적인 이익을 얻을 수 있음 - 따라서 임의 정보 소유자 이외의 이용자에게 해당 정보가 노출되지 않도록 해야 함 - SQL Injection: DBMS에서 사용하는 쿼리를 임의로 조작해 데이터베이스의 정보를 획득하는 기법 - Injection: 주입이라는 의미를 가진 영단어로, 인젝션 공격은 이용자의 입력값이 애플리케이션의 처리 과정에서 구조나 문법적인 데이터로 해석되어 발생하는 취약점을 의미 드림이가 공장에 생산을 요청하는 그..
Background: Relational DBMS # 들어가며 - 서론 - 데이터베이스 (Database): 컴퓨터에 정보를 기록하기 위해 사용 - DataBase Management System (DBMS): 데이터베이스를 관리하는 애플리케이션 - 최근의 웹 서비스에는 데이터베이스가 거의 필수적으로 포함되어야 함 # DataBase Management System - 데이터베이스 관리 시스템 - 웹 서비스는 데이터베이스에 정보를 저장하고, 이를 관리하기 위해 데이터베이스 관리 시스템을 사용 - DBMS는 데이터베이스에 새로운 정보를 기록하거나, 기록된 내용을 수정, 삭제하는 역할을 함 - DBMS는 다수의 사람이 동시에 데이터베이스에 접근할 수 있고, 웹 서비스의 검색 기능과 같이 복잡한 요구사항을 만..
ClientSide: CSRF # 들어가며 - 서론 - 쿠키: 이용자의 신원 정보가 포함되어 일종의 서명과 같은 역할을 함 - 이용자의 식별 정보가 포함된 쿠키: 클라이언트에서 보내진 요청이 이용자로부터 왔으며, 이용자가 동의했고, 따라서 요청에 이용자의 권한이 부여돼야 함을 의미함 - 쿠키를 탈취하는 공격과 이번 코스에서 배울 교차 사이트 요청 위조는 비슷함 - CSRF: 이용자를 속여서, 의도치 않은 요청에 동의하게 하는 공격 > 그럴듯한 웹 페이지를 만들어서 이용자의 입력을 유도하고, 이용자가 값을 입력하면 이를 은행이나 중요 포털 사이트 등으로 전송하여 마치 이용자가 동의한 것 같은 요청을 발생시킴 > "자동 로그인" 기능: 브라우저에 세션 쿠키를 저장하고 있다면, 실제로 계좌 이체가 발생하거나 ..
ClientSide: XSS # 들어가며 - 서론 - 클라이언트 사이드 취약점: 웹 페이지의 이용자를 대상으로 공격할 수 있는 취약점 - 해당 종류의 취약점을 통해 이용자를 식별하기 위한 세션 및 쿠키 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있음 💡 Cross Site Scripting의 약어가 XSS인 이유 - 스타일시트를 정의하는 언어인 CSS와 약어가 중복되기 때문에 XSS로 명명됨 # XSS 1. XSS - 공격자가 웹 리소스에 악성 스크립트를 삽입해 이용자의 웹 브라우저에서 해당 스크립트를 실행할 수 있음 - 공격자는 해당 취약점을 통해 특정 계정의 세션 정보를 탈취하고 해당 계정으로 임의의 기능을 수행할 수 있음 ex) 드림핵 웹 페이지에서 XSS 취약점이 존재하면 https:..