SlideShare a Scribd company logo
1 of 139
해커가 되고 싶은 자는 나에게…
정보보안 입문과 길 찾기
contact@jayjay.app
버그 바운티 헌터?
• 현상금 사냥꾼?
• A.K.A 프리랜서 해커?
• 버그바운티
• 취약점을 찾아 신고하면 포상금을 주는 것
• 버그바운티 플랫폼에 기업들이 자신의 취약점을 찾아달라고 등록한다.
• https://www.hackerone.com/
• https://code4rena.com
• 취약점을 찾고, 보고서를 작성해서 제출
2
Who am I?
목차
• 보안 분야의 대략적인 구조
• 분야별 소개 및 커리큘럼
• 리버싱
• 포너블
• 웹해킹
• 마무리
• Q&A
3
보안 분야의 대략적인 구조
보안 분야는 어떻게 나누어질까?
4
보안 분야의 대략적인 구조
• 크게 레드팀과 블루팀으로 나뉜다
• 간단히 말하면 공격 vs 방어
5
레드팀
• 공격 가능한 지점(취약점)을 찾아낸다
• 공격 경로는 여러가지
• 그냥 모든 분야?
보안 분야의 대략적인 구조
대상 분야
웹서비스 웹 해킹
실행 프로그램 시스템 해킹(포너블)
임베디드 임베디드 해킹
모바일 앱 앱 해킹
블록체인 프로그램 블록체인 해킹
사람의 보안 의식 소셜 엔지니어링
공개되어 있는 데이터를 수집해 탐색 OSINT
6
블루팀
• 프로그램을 안전하게 작성하여 취약점이 없도록 하거나 공격을 완화/차단
• 이미 발생한 보안 사고에 대한 사후 분석
보안 분야의 대략적인 구조
방법 분야
애초에 취약하지 않게 짠다 시큐어 코딩을 하는 개발자
보안 사고 사후 분석
(원인 분석 및 대비, 보고)
침해사고 대응 팀(CERT)
범죄 증거 수집 포렌식
공격을 탐지/차단하는 프로그램 작성 침입 탐지/방지/차단 시스템
기업에게 일정 수준 이상의 보안을 강제 정보 보호 인증
악성코드로부터 유저를 보호 악성코드 분석, 백신 개발
7
너무 광범위하다..
• 보안은 어느 분야이든 적용되기 때문
• 기술이 있다면 취약점이 있다
• 해킹은 기본적으로 제작자가 의도하지 않은 일을 하는 것
• 보안 분야는 이를 방어하거나 방어를 뚫고 하는 것
• 분야가 정확히 나눠지기 보다는 유기적으로 얽혀 있음
• Ex. 서버와의 통신을 웹에서만 하지 않음. 앱도 하는데?
• Ex. 공격 지점을 찾기 위해 난독화된 코드를 읽어야 한다면 리버싱 기술이 필요함
8
너무 광범위하다..
• 일단 한 파트씩 쪼개서 찍먹해보고 선택하자
• 어느 한 파트에 익숙해지면 다른 파트를 익힐 때도 이해도가 깊어질 것
• 보안 전문 일을 하지 않더라도 알아 두면 좋다
• 안전한 프로그램을 작성하기 위해
• 시야가 넓어짐. 개발/디버깅 시 보다 다양한 방법을 이용해 볼 수 있음
9
보안 기술의 큰 분류
• 리버싱
• 리버스 엔지니어링. 컴파일된 소프트웨어를 역으로 분석
• 포너블
• 컴파일된 소프트웨어 공격
• 유저가 흔히 사용하는 소프트웨어부터 Apache 서버, OS 등까지
• 웹해킹
• 웹서비스를 공격. 프론트/백엔드에 대한 공격
• 크립토
• 암호학
• 포렌식
• 공격에 대한 분석 및 대응. 데이터 복구, 증거 수집, 침해대응 등
10
오늘 알아볼 파트
• 리버싱
• 리버스 엔지니어링. 컴파일된 소프트웨어를 역으로 분석
• 포너블
• 컴파일된 소프트웨어 공격
• 유저가 흔히 사용하는 소프트웨어부터 Apache 서버, OS 등까지
• 웹해킹
• 웹서비스를 공격. 프론트/백엔드에 대한 공격
• 크립토
• 암호학
• 포렌식
• 공격에 대한 분석 및 대응. 데이터 복구, 증거 수집, 침해대응 등
11
리버싱
Reverse Engineering
12
리버싱이란?
• 리버싱이란?
• 개발 시, 하이레벨 언어를 컴파일하면 코드를 기계어로 변환
• 리버싱은 이를 거꾸로 하는 것 (이미 컴파일 된 기계어를 해석)
• 디컴파일러를 사용해 하이레벨 언어 형태까지 변환할 수 있지만, 어셈블리어 레벨에서 읽
을 줄 알아야 한다
Assembly
기계어(Binary)
하이 레벨
언어
decompile
Disassemble
Assemble Compile
Reversing
디버깅
로직 분석
악성코드 분석
키젠 및 크랙 생성 <-> 라이선스 인증 로직 개선
DRM 우회 <-> DRM 개선
게임 핵 개발 <-> 게임 핵 방어
…
13
어셈블리어
리버싱이란?
14
어셈블리어
리버싱이란?
15
프로그램 파일 포맷
• 실행파일은 일정한 포맷에 맞춰 생성된다.
• 기계어 뿐만 아니라 실행에 필요한 여러가지 메타데이터가 포함
• 여러가지 메타데이터 분석/파악 필요
• 또한 .jpg, .docx 등 각 확장자들은 자신만의 포맷이 있음
• 자신이 분석할 파일 포맷을 파악해야 함
리버싱이란?
16
리버싱 문제를 풀어보자
• 간단한 문제와 함께 알아보자!
• https://ch.codeengn.com/ Basic RCE L01
프로그램을 실행하면 위와 같은 창이 뜬다.
이 창이 뜨지 않도록 하는 게 문제의 요구사항이다.
17
디스어셈블
리버싱 문제를 풀어보자
디버거를 이용하여 바이너리를 디스어셈블 한다.
차근차근 실행해보며 어느 순간에 왜 창이 뜨는지 찾아보자 18
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
이 줄을 실행하니 원하지 않는 창이 뜬다.
이 명령어는 어떻게 실행하게 되는가?
19
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
바로 위 JE에서 점프하지 않으면
실패 Message Box를 띄운다.
즉, 점프를 시키면
실패 문장을 띄우지 않겠다.
20
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
어떻게 하면 점프를 하는가?
=> 점프는 보통 조건문이다.
=> 무엇을 비교하는가?
21
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
JE위에 CMP가 있다. 즉, EAX와 ESI의 값이 동일하면 점프를 한다.
EAX와 ESI에 들어있는 값의 근원을 찾아보자.
22
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
GetDriveTypeA 함수를 실행하면 EAX가 3으로 설정된다.
ESI는 0으로 초기화되어 있다.
23
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
GetDriveTypeA 함수와 CMP코드 사이의 코드를 살펴보자.
ESI를 총 3만큼 더하고, EAX를 총 2만큼 뺀다.
EAX – 2 == 3 이면 점프를 하므로, 원치 않는 메시지를 띄우지 않기 위해서는
EAX(GetDriveTypeA 의 리턴값)은 5여야 한다. 24
디버거로 실행해보며 로직 분석하기
리버싱 문제를 풀어보자
if(GetDriveTypeA("c:") - 2 == 3){
// success
}
else{
// fail
// 실패 창을 띄움
}
즉, 이 바이너리는 다음과 같은 코드일 것
25
GetDriveTypeA 함수
• GetDriveTypeA함수: Windows API
• Windows API는 검색해보면 문서를 찾을 수 있다.
• https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypea
• 경로를 넣으면 이 경로가 어떤 드라이브인지 결과를 리턴하는 함수
• 해당 경로가 CD-ROM이면 5를 리턴
리버싱 문제를 풀어보자
26
GetDriveTypeA 함수
• GetDriveTypeA 함수 인자로 “c:”라는 문자열을 넣었다
• 실행 컴퓨터의 C 드라이브는 하드 디스크이므로 3을 리턴한 것!
리버싱 문제를 풀어보자
27
어떻게 하면 결과를 변경할 수 있을까?
• 여러가지 방법으로 우회 가능하다
• 내 맘대로 점프하면 좋겠다
• 점프문 조작
• CD-ROM으로 인식하게 하면 좋겠다
• 함수 인자를 CD-ROM의 경로로 수정
• C 드라이브가 CD-ROM으로 잡히게 하는 건 어때?
• 드라이브 매핑 변경?
• 결과에 상관 없이 무조건 ESI == EAX 가 되도록 하면 좋겠다
• ESI == EAX가 되도록 수정 (ESI = EAX;)
• GetDriveTypeA 의 리턴 값을 조작하여 5를 리턴하게 하면 좋겠다
• API 후킹으로 API 리턴 값 조작
리버싱 문제를 풀어보자
28
로직을 변경하여 조작된 바이너리 제작
리버싱 문제를 풀어보자
CMP하기 전에 ESI에 EAX의 값을 대입하도록 수정했다. (ESI = EAX;)
바이너리를 수정해 저장하면 업데이트된 EXE 파일을 얻을 수 있다.
이 EXE를 실행하면 로직을 우회하여 성공 창이 뜨는 것을 볼 수 있다. 29
바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까?
• 보안을 위해 조작이 가해진 소프트웨어를 사용하지 않도록 방지하곤 함
• 소프트웨어에 서명
• 바이너리가 변경되어 서명과 일치하지 않으면 실행하지 않음
• 패킹/프로텍터 이용
• 실행 파일의 크기를 줄이기 위해 바이너리를 압축
• 리버싱을 방지하기 위해 코드를 해석하기 어렵게 뒤섞음
• 이를 우회하는 방법이 있을까?
리버싱 문제를 풀어보자
30
바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까?
• API
• 사용자 어플리케이션이 시스템 자원(메모리, 파일, 네트워크 등)을 사용하고 싶을 때
직접 접근 불가
• OS가 관리하는 자원
• 여러가지 이유로 사용자 어플리케이션이 직접 접근할 수 없게 막아 둠
• 이를 이용하려면 OS에게 요청해야 함
• 시스템 API 호출 또는 시스템콜을 통해 요청
리버싱 문제를 풀어보자
31
바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까?
• API 후킹
• API 호출을 중간에 가로채서 제어권을 얻어내는 것
• API 호출 전/후에 임의의 코드를 실행시킬 수 있다.
• API에 넘어온 파라미터 혹은 리턴 값을 엿보거나 조작할 수 있다.
• API 호출 자체를 취소시키거나 실행 흐름을 변경시킬 수 있다.
• Frida와 같은 툴을 이용하면 간편하게 후킹 가능
리버싱 문제를 풀어보자
32
바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까?
• API 후킹 예
• 메모장 저장 버튼을 누르면 CreateFile API 호출
• 정상시 kernel32.dll의 CreateFile 함수 실행
• API를 후킹한다면?
• CreateFile함수를 호출 시 공격자가 끼워 넣은 코드
가 먼저 호출됨
• 끼워넣은 코드에서 원본 API(CreateFile)를 호출
• API의 결과를 받고, 결과를 조작해 리턴
리버싱 문제를 풀어보자
출처: https://reversecore.com/54
33
바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까?
• GetDriveTypeA API를 후킹하고 리턴값을 5로 조작하면?
• 바이너리를 조작하지 않고도 문제를 해결할 수 있다!
리버싱 문제를 풀어보자
34
1. 배경지식을 익힌다
• 로우레벨 언어로 개발하고 하고 뜯어보기
• C로 작성한 실행 파일을 디버거로 뜯어보자
• 처음에는 최적화 옵션, 보안 옵션을 전부 꺼서 직관적인 바이너리로 볼 것
• 내 코드가 어셈블리어로 어떻게 번역되어 있는지 비교해보자
• OS, 컴퓨터시스템에 대한 배경지식이 필요
• 후킹 등 고급 리버싱 기술을 이해하기 위함
어떻게 공부하나요?
35
2. 여러가지 문제를 풀어보자
• 워게임 문제를 풀며 분석 실력과 끈기를 기르자
• 디컴파일된 코드를 읽어 로직을 역으로 세우는 일을 연습하는 것이 목적
• 리버싱은 인내심이 필요하다
• 인내심도 연습해야 길러진다!
• 어디까지 물고 늘어져야 일이 완료되는지 감각을 얻어야
• 인내심 수련을 한다는 마음으로 차근차근 읽어보자
어떻게 공부하나요?
36
3. 안티리버싱을 우회해보자
• 안티리버싱
• 실제 프로덕트/악성코드는 프로그램을 분석당하지 않도록 방해하는 기술이 적용됨
• 여러가지 안티 리버싱을 우회하는 방법을 익히자
• 어떻게 리버싱을 막는지 공부하고 우회방법을 공부
• 직접 우회 툴을 짜보기
어떻게 공부하나요?
37
4. 각종 기술/툴을 도입해보자
• IDA, Frida, 각종 디컴파일러, 분석 툴..
• 안티 리버싱 우회, 루팅 확인 우회 등
• 필요한 상황에 따라 이를 우회할 툴을 찾거나 툴에 끼워 사용할 스크립트를 짠다
어떻게 공부하나요?
38
5. 원하는 분야를 선택해 특화
• 리버싱 입문은 Windows가 자료가 많기 때문에 Windows 추천한 것
• 원하는 분야를 선택해 배경지식, 도메인에 특화된 분석 기술을 익힌다
• 리눅스 바이너리.. ARM… 안드로이드 APK.. 난독화 된 JS.. EVM..
어떻게 공부하나요?
39
포너블
Pwnable
40
포너블이란?
• 프로그램의 취약점을 찾아 공격
• 대상은 주로 컴파일 된 소프트웨어
• 유저가 흔히 사용하는 소프트웨어부터 Apache 서버, OS 등까지
• 관리자 권한을 얻어 시스템을 장악, 의도치 않은 행동을 하게 함
• Ex) 프로그램에 특정한 입력 값을 넣으면 마음대로 셸을 실행시키고, 이 컴퓨터에 외
부에서 접속해 자유롭게 명령을 내릴 수 있다!
• 리버싱과 밀접한 관련이 있음
• 취약점을 찾기 위해 프로그램을 뜯어볼 줄 알아야
41
BOF (Buffer overflow)
• 말 그대로 버퍼가 넘치는 것
• 원래 사용하려던 메모리를 벗어나 다른 데이터까지 침범, 오염시킴
• 대개 사용하는 버퍼 크기를 체크하지 않는 위험한 함수로 인해 발생
• Ex) gets, scanf
• 메모리 기반 취약점의 시작 지점
• 어떻게 문제가 발생하는지 살펴보자!
42
포너블이란?
지역변수
• 지역변수는 시스템 스택에 저장된다
• 시스템 스택에 대해 알아보자
43
포너블이란? – BOF에 대하여
프로그램의 소스코드 저장
초기화되지 않은 전역 변수 저장 (위치 예약)
초기화된 전역 변수 저장
가변적
동적할당에 사용
가변적
지역변수 저장
높은 주소
낮은 주소
전역변수
지역변수
스택 자료구조
• 스택이란 무엇인가?
• 후입선출 (Last-In-First-Out, LIFO)로 관리되는 자료구조
44
포너블이란? – BOF에 대하여
시스템 스택
45
포너블이란? – BOF에 대하여
시스템 스택
• 시스템 스택은 스택 프레임으로 관리
• 함수는 자신 만의 스택 영역을 가질 수 있음
• 각 함수가 자신의 임시 저장영역(지역변수 저장)을 가질 수 있게 함
• 각 함수의 스택 영역에 저장되는 값
• 함수 호출 파라미터
• 함수를 마치고 돌아갈 주소(리턴 주소)
• 지역변수
• 스택 프레임을 사용해 각 함수를 위한 스택을 생성, 함수를 마치면 파괴해 스택을 관리
46
포너블이란? – BOF에 대하여
시스템 스택
• 시스템 스택을 관리하는 레지스터 : ESP와 EBP
• EBP는 해당 스택 프레임의 바닥 주소를 가리킨다. (스택 프레임의 시작 지점)
• EBP레지스터는 하나 밖에 없음
• 새로운 스택 프레임을 생성할 때(함수 내부에서 함수 호출 시) 항상 EBP를 백업해야 함
• 함수 종료 후 백업해 둔 EBP 값을 이용해 이전 함수의 스택으로 복귀
• ESP는 확보된 스택의 꼭대기 주소를 가리킨다.
• EBP = 0x1000, ESP = 0x800 이라면 이 함수는 0x200 만큼의 스택을 사용하고 있는 것
• 스택은 주소가 낮아지는 방향으로 자라기 때문에 ESP의 주소가 더 작음
47
포너블이란? – BOF에 대하여
ESP/EBP와 스택 프레임
48
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
EBP가 가리키는 주소
ESP가 가리키는 주소
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
49
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
EBP가 가리키는 주소
ESP가 가리키는 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
50
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
EBP가 가리키는 주소
ESP가 가리키는 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
51
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
EBP가 가리키는 주소
ESP가 가리키는 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
52
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
53
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
54
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
55
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
56
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 xx
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
57
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 xx
지역변수 yy
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
58
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 xx
지역변수 yy
지역변수 zz
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
59
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 xx
지역변수 yy
지역변수 zz
지역변수 sum
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
60
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
foobar 함수가 호출되기 전 EBP 백업
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
61
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
foobar 함수가 끝나고 돌아갈 리턴 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
62
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
함수 foobar의 인자 99
함수 foobar의 인자 88
함수 foobar의 인자 77
EBP가 가리키는 주소
ESP가 가리키는 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
ESP/EBP와 스택 프레임
63
포너블이란? – BOF에 대하여
높은 주소
낮은 주소
EBP가 가리키는 주소
ESP가 가리키는 주소
지역변수 num
Main 함수가 호출되기 전에 쓰던 EBP 백업
함수 작동 원리
64
포너블이란? – BOF에 대하여
BOF란?
65
포너블이란?
20바이트 크기의 지역변수를 사용
- 컴파일러는 넉넉하게 0xE0(=244)바이트를 확보했음
- 컴파일 결과는 컴파일러, 최적화 옵션에 따라 다름
BOF란?
66
포너블이란?
지역변수를 위해 예약한 영역(의 일부)
현재 이전에 이용했던 스택 값 (더미 값)이 있음
백업한 EBP
BOF란?
67
포너블이란?
buf 배열의 시작 주소(스택 주소)를
scanf 인자로 넣는다 (EBP-1C)
[EBP-1C]~[EBP-9] 까지는 buf 를 위한 스택
(20바이트)
BOF란?
68
포너블이란?
EBP-1C부터 주소를 증가해가며 데이터를 저장한다.
BOF란?
69
포너블이란?
scanf는 버퍼의 크기를 제한하지 않는다.
20글자 이상 입력해서 백업해 둔 EBP와
리턴 주소를 침범했다
-> 원래 이전 EBP 백업이 있던 곳
-> 원래 리턴 주소가 있던 곳
BOF란?
• 만약 정확하게 버퍼 크기와 스택의 구조를 안다면?
• 원하는 지점의 메모리를 변경할 수 있다
• Return Address를 조작 => EIP 조작
• 원하는 코드 실행
• 변수 값 조작
• 함수 파라미터 조작
• …
70
포너블이란?
포너블 문제를 풀어보자
• http://pwnable.kr bof 문제
• 실행 파일(ELF 파일)과 소스코드를 준다.
• 서버에서 이 프로그램이 실행 중이다. 9000 포트에 접속해 입력 값을 보내면 프로그램에게 넘긴다.
• 서버에서 돌아가는 이 프로그램을 해킹해 서버에 셸을 띄우고, flag를 얻어야 한다.
71
취약점 파악
72
포너블 문제를 풀어보자
• func에 인자로 0xdeadbeef를 주며 호출했다.
• func에서, 인자가 0xcafebabe이면 쉘을 실행한다.
• => func 함수 호출 인자를 조작하고 싶다
• 어떻게 호출 인자를 조작하지?
• 함수 인자는 스택에 있다.
• 안전하지 않은 함수 gets가 호출되고 있다.
• gets를 이용해 BOF를 일으켜 함수 인자를 조작
디스어셈블하여 정확한 메모리 정보 파악
73
포너블 문제를 풀어보자
스택 확보 : 0x48만큼
EBP 백업
버퍼 시작 주소 : EBP – 2C
함수 인자 주소 : EBP + 8
EBP backup
Return address
ef be ad de
EBP
EBP - 48
EBP + 4
EBP + 8
EBP - 44
EBP - 40
EBP - 3C
EBP - 38
EBP - 34
EBP - 30
EBP - 2C
EBP - 28
EBP - 24
EBP - 20
EBP - 1C
EBP - 18
EBP - 14
EBP - 10
EBP - C
EBP - 8
EBP - 4
74
EBP backup
Return address
ef be ad de
EBP
EBP - 48
EBP + 4
EBP + 8
EBP - 44
EBP - 40
EBP - 3C
EBP - 38
EBP - 34
EBP - 30
EBP - 2C
EBP - 28
EBP - 24
EBP - 20
EBP - 1C
EBP - 18
EBP - 14
EBP - 10
EBP - C
EBP - 8
EBP - 4
여유 공간
(컴파일러에 따라)
바꾸고 싶은 값
func 파라미터
(4 byte)
overflowme 배열에
할당된 공간
(32 byte)
스택 카나리
(12 byte)
EBP 백업, 리턴주소
(8 byte)
75
Exploit
76
포너블 문제를 풀어보자
• 인자를 조작하여 system("/bin/sh")를 실행한다. 52개의 쓰레기 값 + 0xcafebabe
• 리틀 엔디안에 주의
• ->쉘 실행!
• 쉘에서 자유롭게 명령어를 입력하여 flag 파일을 찾아 읽었다.
1. 배경지식을 익힌다
• OS, 컴퓨터시스템에 대한 배경지식이 필요
• 로우레벨 수준에서 문제가 발생하므로
• 공격 페이로드를 기계어(어셈블리어)로 짜야 함
• 물론 도와주는 툴이 있긴 하지만..
• 특히 메모리 관련 지식이 중요
• 리버싱을 어느정도 익힌다
• 오픈소스가 아니라면 리버싱이 필요
• 공격이 잘 작동하는지 확인하기 위해.. 공격을 디버깅하기 위해서도 필요
77
어떻게 공부하나요?
2. 취약점 종류별로 간단한 문제 풀기
• 셸코드, 익스플로잇 짜고 공격하는 방법을 익히는 목적
• 취약점과 공격/방어 기법, 우회 방법을 종류별로 익히는 목적
• 나름대로 분류하고 정리하여 자신만의 데이터를 쌓자!
• 블로그/노션 등…
• 풀이 방법, 문제를 풀면서 조사한 지식들
• 잘 정리해두면 추후 포트폴리오나 뭐라도 할 때 사용할 리소스가 많아진다
78
어떻게 공부하나요?
3. 복잡한 문제 풀기
• 어려운 워게임, CTF를 풀어보며 어려운 문제에 도전해보자
• 취약점 종류에 대한 힌트 없이 바이너리만 들고 취약점을 찾아내는 연습
• 정보가 없이 찾는 연습은 리얼월드 취약점을 찾는 연습도 된다
• 여러가지 툴을 이용해본다.
• 오픈소스 뒤져서 괜찮은 툴을 찾기… 편한 툴을 찾아 내 것으로 만들자!
• https://github.com/longld/peda
• pwntools.com
• …
79
어떻게 공부하나요?
4. 리얼월드 분석하기
• 발표되는 CVE나 버그헌팅 보고서 읽기
• 리얼월드에서 발생한 취약점/익스플로잇을 분석
• CVE 찾아보는 사이트
• https://cve.mitre.org
• https://www.exploit-db.com : 공격코드
• https://vuldb.com
• 버그헌팅 보고서 사이트
• https://hackerone.com : 웹이 메인이긴 하지만 실행 파일 취약점도 검색해보면 있긴 함
• CTF나 워게임에서 보는 것보다 단순하고 일반적인 문제가 빈번하게 발생한다.
• 대부분이 개발자의 실수로부터 발생
80
어떻게 공부하나요?
5. 다양한 방법 사용해보기
• Fuzzing/Symbolic execution/Taint analysis 등 다양한 분석 방법 도입
• 취약점을 찾아내는 여러가지 방법을 이용해보자
• 이 시점부터는 논문/원서 찾아보며 리서치 해나가야 함 (한글 자료 별로 없음)
• 단순히 툴을 사용하는 것 이상으로, 어떻게 하면 최적화된 분석을 돌릴 지 연구
• 오래 걸리기 때문..
81
어떻게 공부하나요?
웹해킹
Web hacking
82
웹해킹이란?
• 웹이란?
• 우리가 흔히 사용하는 웹서비스
• 크게 프론트엔드와 백엔드로 나뉨
• 프론트엔드
• 유저의 브라우저에서 사용되는 HTML, JS 등
• 브라우저에서 어떻게 사이트를 보여줄지, 유저가 버튼을 눌렀을 때 어떻게 반응할지 등
• 백엔드와 통신, 유저의 요청을 전달하고 백엔드가 전달한 데이터를 화면에 뿌림
• 백엔드
• 서버 및 그와 연동되는 DB 등
• 웹서비스를 위한 데이터 저장/제공, 인증, 비즈니스 로직 구현 등
• 프론트엔드와 통신, 데이터를 전달하거나 유저의 요청을 처리 함
83
클라이언트 사이드 취약점
• 클라이언트 사이드: 프론트엔드(유저의 브라우저)에 영향을 끼치는 취약점
• 유저의 브라우저에 임의의 작업을 시켜 악성 행위를 함
• 유저의 쿠키 등 탈취 (=남의 계정으로 로그인하기)
• 유저의 컴퓨터에 악성코드 배포
• 프론트엔드 지식, 일부 백엔드 지식 필요
• Ex) 게시글 페이지에 취약점이 있다. 공격자의 게시글을 읽은 유저의 컴퓨터가 피해
를 입게 된다.
84
웹해킹이란?
서버 사이드 취약점
• 서버 사이드: 서버에 영향을 끼치는 취약점
• 서버 컴퓨터에게 임의의 작업을 시킴
• 서버에 업로드 된 모든 리소스, 서버 코드 탈취, DB 탈취/삭제/조작
• 내부망으로 침투, 다른 서버까지 장악
• 장기적으로 스파이 행위
• 다른 서버를 공격하는 데 사용, 악성코드 배포지로 이용
• 백엔드 지식 필요
• Ex) 게시글을 DB로 저장하는 기능에 취약점이 있다. DB에게 임의의 작업을 시킬 수
있어 존재하는 모든 게시글을 삭제하여 서버에게 피해를 준다.
85
웹해킹이란?
XSS
• 공격자가 유저의 브라우저에서 임의의 Javascript를 실행하게 함
• 유저의 쿠키 등을 탈취한다면 해당 유저인 척 할 수 있음
86
웹해킹이란? - 클라이언트 사이드 취약점에 대하여
<웹 서버>
<사용자>
<공격자> 악성 스크립트가 있는 URI 제공
(ex. 메일로 보내기, 악성 게시글 쓰기 등)
2 페이지 요청
3
Response
(악성 스크립트 포함)
Client 브라우저에서
악성 스크립트 실행
4
1
XSS
• 유저 또는 다른 유저의 입력 값을 화면에 그대로 보여줄 때
• 값이 끼워 넣어지는 부분의 HTML/JS 문법을 탈출해 임의의 HTML/JS를 끼워 넣는다
• Ex) 회원정보 닉네임을 <script>alert(0)</script> 로 한다면?
• <div>안녕하세요, <script>alert(0)</script> 님! </div>
87
웹해킹이란? - 클라이언트 사이드 취약점에 대하여
웹해킹 문제를 풀어보자 - XSS
• https://xss-game.appspot.com 3번
• 문제의 목표는 XSS를 통해 alert를 띄우는 것이다.
• Image 1, Image 2, Image 3 탭을 누르면 이미지와 상단의 글자가 변경된다.
88
Image 탭을 눌렀을 때 반응 관찰
• Image 탭을 눌렀을 때 URL이 변경된다. # 뒤의 숫자가 변경된다.
• #3이 붙었을 때, cloud3.jpg 라는 이미지를 가져온다.
89
웹해킹 문제를 풀어보자 - XSS
프론트 소스코드 분석
• 이미지 탭을 누를 시 chooseTab() 함
수 호출
• URL로 접속하여 페이지에 접속한 경우
• # 문자 뒤의 값을 파싱해 chooseTab() 의
인자로 하여 호출한다.
90
웹해킹 문제를 풀어보자 - XSS
프론트 소스코드 분석
• chooseTab() 함수는 입력된 인자로 img 태그를 작성, HTML에 넣는다.
91
웹해킹 문제를 풀어보자 - XSS
테스트
• # 뒤에 임의의 글자를 써보자
• asdf 를 넣으니 cloudasdf.jpg 파일을 이미지 경로로 설정한다.
• 이 경로에는 이미지가 없어 이미지가 뜨지 않았다.
• 즉, 입력 값이 img 태그 경로에 그대로 반사된다.
92
웹해킹 문제를 풀어보자 - XSS
Exploit
• html += "<img src='/static/level3/cloud" + num + ".jpg' />";
• 앞의 따옴표를 닫고, 원하는 페이로드를 넣고, 다시 .jpg'를 처리하면 자연스러운 img
태그를 완성할 수 있다. (HTML을 깨트리지 않음)
• 0' onerror=alert(1) foo=' 라는 페이로드를 넣었다.
• "<img src='/static/level3/cloud0' onerror=alert(1) foo='.jpg' />";
93
웹해킹 문제를 풀어보자 - XSS
Exploit
• /static/level3/cloud0 라는 경로에 파일이 없어 img 태그는 랜더링 시 에
러를 발생
• 임의로 끼워 넣은 onerror 핸들러에서 alert를 띄움(원하는 JS 실행)
웹해킹 문제를 풀어보자 - XSS
94
SQLi
• DB 쿼리에 임의의 쿼리를 끼워 넣어 임의의 작업 실행
• DB에서 데이터를 탈취/추가/수정/삭제 하거나 커맨드 인젝션 등으로 공격을 심화
• Ex) user_supplied_input 이 "some_trash_value" OR 1 = 1 라면?
• SELECT id FROM vuln_table WHERE vuln = "some_trash_value" OR 1 = 1
• 원래는 vuln_table 에서 vuln 필드의 값이 유저 입력 값인 것을 조회, 일치하는 행의 id를
리턴하라는 의미
• 1=1이면(이것은 항상 참) 해당하는 id를 리턴하라는 쿼리로 변경됨 If (true) 나 마찬가지
95
웹해킹이란? – 서버사이드 취약점에 대하여
웹해킹 문제를 풀어보자 - SQLi
• https://los.rubiya.kr
• 문제의 서버 코드(PHP)를 준다. 여러 조건을 우회하며 문제를 풀어가야 한다.
• 리얼월드에서는 소스코드 없이 서버의 반응을 통해 추측하거나, 에러 로그 유출 등을 통해
조건을 우회해야 함
• Gremlin 문제 (1번 문제)
• prob, _, ., () 등의 문자는 사용할 수 없도록 필터링한다.
96
쿼리 분석
• $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'";
• URL 파라미터 id와 pw를 이용하여 SQL 쿼리를 생성, 실행한다.
• DB상에서 조회한 id와 pw가 매칭되면 $result에 결과가 리턴된다.
• 즉, 로그인 기능이다. 하지만 아는 id도 pw도 없는데?
97
웹해킹 문제를 풀어보자 - SQLi
Exploit
• 아는 계정과 비밀번호가 없어도 무조건 쿼리 결과가 있도록 하려면?
• Where문을 무조건 참으로 만들자! 모든 행이 조건에 맞도록 하자!
• select id from prob_gremlin where id='랜덤값' and pw='랜덤값' or '1'='1';
• '1'='1' 이 항상 참이므로, Where문은 항상 참이 된다. 따라서 모든 행이 선택될 것이다.
• mysql_fetch_array는 그 중 하나의 행을 리턴한다. (보통 반복문을 이용해 한 행 씩 꺼내 사용)
98
웹해킹 문제를 풀어보자 - SQLi
1. 웹개발을 해본다
• 기술을 충분히 이해해야 기술을 어떻게 악용할 지 아이디어를 낼 수 있음
• 만들다 보면 어떤 취약점이 왜 발생하는지 이해하기 쉽다
• 웹은 블랙 박스 테스트가 많음
• 서버의 반응만 보고 서버 코드를 추측할 수 있어야 한다. 그러려면 웹개발의 맥락을 이해해야 함
• 웹은 굉장히 광범위한 기술 스택을 이용함
• 각 서버/프론트 프레임워크의 디테일을 하나하나 이해 (X)
• 너무 많아서&트렌드가 빠르게 변해서 모든 걸 파악하긴 어려움
• 그래도 메인으로 사용하는 프레임워크가 있다면 좋다. 이왕이면 유명한 것..
• 근본적인 기술을 이해 (O)
• Ex) API 서버 만들어보기. REST API/GraphQL/Protobuf 등 여러가지 형태로 짜보기.
• Ex) 서버 <> 클라이언트 통신해보기. HTTP 기반 API, 웹소켓 등 여러가지 방식 써보기
• Ex) JWT 를 이용한 로그인은 어떻게 하는가 개발해보며 이해, 문제가 왜 생기는지 이해
• 서버 셋팅, 프론트, 백 전부 해보며 웹이 어떻게 연동되는지 전체적인 그림 그리기
99
어떻게 공부하나요?
2. 취약점 종류별로 문제 풀기
• 취약점과 페이로드 짜는 법을 익힌다
• 취약점 종류가 다양함. 범위가 넓음
• 보통 웹해킹 하면 SQLi와 XSS만 다루는 경우가 있는데, 그 외에도 다양한 취약점이 있다!
• https://portswigger.net/web-security
• 처음에는 유형별 연습문제 풀듯 풀고, 점차 취약점 종류에 대한 정보 없이 풀어보기
• 문제를 풀며 Burpsuite 같은 기본적인 툴에도 익숙해지자
100
어떻게 공부하나요?
3. 리얼월드 케이스 스터디
• 버그헌팅 사례 분석, CVE 분석
• 리얼월드에서 발생한 취약점/익스플로잇을 분석
• https://hackerone.com
• CTF나 워게임에서 보는 것보다 단순하고 일반적인 문제가 빈번하게 발생한다.
• 대부분이 개발자의 실수로부터 발생
• 리얼월드 해킹하듯 Reconnaisaance(정찰)부터 시작하여 접근하는 방식도 익혀보자
101
어떻게 공부하나요?
4. 최신 웹 기술, 방어기법 우회 방법 공부
• 어려운 워게임이나 리얼월드 케이스 스터디를 통해 우회법 익히기
• NoSQL, 웹소켓, GraphQL, Protobuf 등…
• 가장 메이저한 기술 스택(SQL, REST API 등) 외에 여러가지 기술로 범위를 넓혀가자
• 간단한 사이트를 만들어보며 사용법, 특징 익히기
• 이 기술과 관련된 취약점 사례를 찾아보기
• WAF(Web Application Firewall) 우회 방법 익히기
• https://waf-bypass.com/
102
어떻게 공부하나요?
5. 여러가지 자동화 툴 사용
• 여러가지 자동화 툴, 스캐너, 퍼저를 사용해보자
• 오픈소스를 뒤져가며 내 손에 맞는 툴을 만들자
• 스캐너를 조합하여 자동 스캐너를 만들어보자
• https://github.com/pry0cc/axiom
103
어떻게 공부하나요?
마무리
취업에 관한 이야기
104
그래서 무슨 직업을 가질 수 있나요?
• 사실 한국에선 보안 아는 개발자가 보안 전문가보다 잘 벌지만…………
• 그냥 보안 잘 아는 개발자 하면 좋습니다
• 그래도 보안이 너무 좋아요
• 외국어를 공부합시다…
105
그래도 보안이 너무 좋아요
106
그래서 무슨 직업을 가질 수 있나요?
• 웹해킹/포너블
• 보안진단/모의해킹/컨설팅
• 블록체인 오딧팅
• 화이트 해커(?)
• 리버싱
• 악성코드 분석
• 게임핵 분석 및 대응 (게임회사)
• 안티 리버싱 툴 개발
• 경쟁사 리버스엔지니어링 해주세요(?)
• 보안 제품 개발
• 보안 솔루션 개발
• 백신 개발
• 자동 보안 진단 프로그램 개발
• OSINT 정보 수집 서비스 개발 (like Shodan)
• …굉장히 다양한 보안 제품들…
• 포렌식
• 사이버수사대
• 침해사고 대응 (CERT)
• 보안 엔지니어
• 보안 시스템을 설계, 구현, 업데이트, 운영
• 대규모 클라우드 설계
• 일반 회사의 보안팀
• ISO27001, ISMS-P 요건 맞추기
• 각종 리소스 보안 관리, 보안 솔루션 도입 등
• 직원 보안 교육
• 자사 제품 취약점 찾기
• 외부 보안 회사에 외주 주기
• 침해사고 대응 등
• ISO27001, ISMS-P 심사원
• 7급 공무원(?)
• 야생의 버그 헌터
포트폴리오? 대외활동?
• CTF
• 팀 짜서 대회 나가기. 취업 시 우대사항으로 본다.
• https://ctftime.org/
• 버그헌팅
• 리얼 월드에서 버그 찾기. 수익도 얻을 수 있다!
• 취업 시 우대사항으로 본다. 의외로 할만 함
• 워게임 풀이/CVE 분석/버그헌팅 리포트 분석/악성코드 분석 등 정리
• 블로그에 정리하거나 포트폴리오에 사용하자
• 보안 관련 랩 학부연구생
• 보안에 관심있는데, 관련해서 학부연구생 할 수 있는지 메일 보내봅시다!
• 학과 공지사항 게시판에 모집 공고 올라오기도 함
107
취업할 때 뭘 써야하죠?
포트폴리오? 대외활동?
• 할만한 대외활동
• BoB: https://www.kitribob.kr/
• 화이트햇 스쿨: https://www.kitribob.kr
• KITRI에서 새로 운영하는 교육
• BoB 지원 시 가산점 받을 수 있음
• K-Shield JR: https://www.kshieldjr.org/
• 해킹캠프: http://hackingcamp.org/
• 보안 컨퍼런스 PoC에서 주관하는 해킹/보안 캠프
• 그냥 1박 2일 발표 듣고 CTF 하고 친구 사귀는 곳
108
취업할 때 뭘 써야하죠?
어떻게 보안 공부를 하셨나요?
• 대학 와서 처음 컴퓨터 공부 시작
• 1~2학년까지는 C, C++ 언어 책을 무한 반복
• 책 읽고 워게임 문제 풀기
• 1~2학년 때 해킹 책을 이해하려고 해봄 -> fail
• 3학년쯤 드디어 책이 이해가 되기 시작함
• OS, 컴퓨터 시스템, 네트워크, DB 지식이 생겨서
• 보안 관련 랩 학부 연구생
• 2학년 겨울방학~3학년 겨울방학
• 보안 관련 프로젝트를 하긴 했는데, 레드팀 관련은 아니었음
109
개인적으로…
• 3학년 마치고 1년 휴학, 스터디 진행
• 혼자 공부하자니 외롭고 잘 안 되고… 집에 있음 눕고 싶고… 나
에겐 마감이 필요해~
• 에타에서 보안할 사람 2명 모아서 강의식으로 진행
• OS/컴퓨터 시스템+윈도우 리버싱, 리눅스 리버싱, 포너블
순서로 강의
• 학회가 신설됐는데… 지인에게 납치되어 학회에서 스
터디 진행
• 이왕 강의자료를 만들었으니 복습할 겸 한번 더 강의
• +웹해킹 강의 추가…하다가
• BoB 합격하여 휴학하고 BoB로
• 독학인생 끝나고 나의 성공시대 시작될까? (과연?)
BoB 지원 시 어떤 점을 어필했나요?
• 자기소개서는 스터디 진행한 것을 중심으로 썼음
• 스터디를 진행한 이야기로 빌드업
• 강의 자료는 SlideShare에, 강의 녹화본은 유튜브에 올려놓고 링크 공유
• 문제 풀이나 스터디 기록은 블로그에 올리고 링크 공유
• 학부연구생으로 보안 관련 프로젝트
• 보안 장비에서 생성하는 로그를 수집, 실시간 빅데이터 분석 (Spark streaming)
• 면접 때 이쪽을 많이 물어봄
110
개인적으로…
어떻게 버그헌터가 되었나요?
• 2학년 때 버그헌팅에 대해 알게 됨
• 프리랜서 버그헌터로 먹고 살겠다는 목표를 세움
• 디지털 노마드로 돌아다니면서 퍼즐 풀어서 밥 벌어먹으면 얼마나 즐거울까?
• 졸업 후 한동안 버그헌팅에 매달림
• 당시 웹해킹으로 버그헌팅, 하지만 이것만으로 생활하기엔 작은 성과… 경험과 요령이 부족하다.
• 취직하여 자금과 경험을 쌓을 필요가 있겠다 판단
• 취직
• 보안 직무라고 갔지만 개발 일을 더 많이 함
• 스마트 컨트랙트 오딧팅 및 개발, 모의해킹, 백엔드 개발, 프론트 개발… ^^;
• 언제까지 뭔가 하고싶은 열정이 남아있을까?
• 월급만 바라보면서 재미없는 프로젝트 짜는 거 질린다.. 말도 안 되는 클라이언트 싫다..
• 퇴근하면 기력이 없어서 아무것도 못하겠는데… 이러고 평생 살아야 하나? 이제는 다시 도전할 때이다!!!
• 일단 3개월 해보고 각 안 나오면 취업한다 라는 기준을 세운 후 도전…
• 버그헌팅만으로 생활? 이제 가능한 듯? 😎
111
개인적으로…
결론
• 해킹/보안이란 기본적으로 남의 프로그램/공격을 분석하는 일
• 개발/공격을 할 줄 알아야 남의 것을 분석할 수 있다. 원리를 이해해야 분석이 가능
• 끈기가 필요한 일이다
• 거대한 코드베이스에서 단 한 라인으로 인한 오류를 찾아내기
• 난독화 된 코드/페이로드 해석하기
• 실력이 붙기까지 꽤 많은 시간이 필요함
• 문제가 안 풀려도 책이 이해가 안 되어도 조급해 하지 말고 멀리 보고 차근차근 쌓아가자
• 많이 짜고, 읽고, 직접 실험해보기를 무한 반복
112
결론
• 기본적으로 분야 별 공부 방법은 비슷함 (교과서 위주로 공부했어요?)
• 개발/배경지식 익히기
• 취약점 원인에 따른 분류 및 공격 방법 익히기
• 방어 기법과 우회 방법 익히기
• 리얼월드 케이스 스터디
• 다양한 최신 분석 기법/툴 사용법 익히기
• 특화 분야 정해서 자리잡기
113
결론
• 배경지식이 많이 필요한 일
• 아는 만큼 보인다. 더 깊이 이해할 수록 남들이 보지 못하는 더 많은 게 보일 것
• 학교 수업에 충실하게 임하는 것도 중요!
• 교수님이 맘에 안 들어도 드랍하지 말고, 혼자서라도 교재를 열심히 읽자
114
115
수학은 타겟 로직 이해 시 필요
탄탄히 해 둘수록 좋다!
(특히 블록체인 DeFi나 금융 쪽)
타겟 소스코드를 이해하려면
기본 개발 지식은 필수
웹해킹 시 DB를 잘 알아야 한다.
(DB를 털어야 하니까)
로우레벨은 리버싱/포너블의 기초 배경지식
정보보안은 들어야죠
암호학, 보안 기초
네트워크는 분야 불문 필수
배경지식
백엔드 개발..?
웹해킹 배경지식
(없던 수업이라..)
<해킹 관점에서 수업의 쓸모>
이 수업을 꼭 들으라는 건 아니고... 이런 쓸모가 있을테니 열심히 하자는 의미..
이외의 수업들도 일단 알아두면 도메인 지식이 되어
특정 분야 테크를 타거나, 다양한 타겟을 빠르게 이해하는 데 도움이 됩니다~
Q&A
사전 질문
현장 질문
116
사전 질문
• 혹시 SuNiNaTaS 하셨다면, 가장 기억에 남는 문제나 어려웠던 문제, 도움
이 되었던 문제 등 이야기 나눠 주시면 감사하겠습니다!
• SuNiNaTaS는 안 풀어봤습니다…
• 가장 기억에 남는 문제는 pwnable.kr 의 unexploitable 문제입니다.
• BoB 과제로 나왔는데, 센터에서 밤새면서 SROP를 처음 이해한 순간 굉장히 기뻐한 기억
117
Q&A
사전 질문
• 안녕하세요? 정보보안 분야로 진출을 희망하는 2학년 학생입니다. 이쪽 분
야도 알고리즘 ps를 틈틈이 하는 것이 도움이 되는지 궁금합니다 ㅎㅎ 감
사합니다!
• 공격 자체에는 직접적으로 PS가 필요하진 않는 것 같습니다.
• 그치만 문제를 풀며 훈련되는 사고방식이 영향을 주긴 하는 것 같아요
• 툴을 만들 때는 ‘아 이거 뭔가 PS 문제로 있을 것 같은데… 쉽게 짤 방법이 있을 것 같
은데…’ 같은 생각이 들 때가 있습니다. 그래서 약간 아쉬울 때가 있어요.
118
Q&A
사전 질문
• 탑 쌓듯이 기초 컴퓨터 지식을 공부하고 해킹 공부를 하는 게 맞는지, 우선 해킹
공부를 시작하면서 모르는 게 나올 때마다 찾아보면서 하는 게 맞는지 궁금합니
다.
• 베이스가 전혀 없다면 (컴퓨터를 처음 공부) 베이스를 쌓는 쪽이 효율적
• 모르는 게 나올 때마다 검색하는 상황이 너무 많으면 컨텍스트 스위칭이 일어나겠죠?
• 한 3학년 수준의 베이스를 쌓으면 찾아보면서 할만한 것 같습니다!
• 그 전까지는 복습 & 학교 커리큘럼 예습 하는 게 효율적일듯
• 그래도 재밌는 걸 뒤로 미루면서 배경지식만 쌓는 건 지루하니까…
• 일단 해보면서 너무 모르는 게 많다 싶으면 부족한 쪽의 지식을 쌓는 시간을 가집시다
• 잘 모르겠어도 읽었을 때 재밌으면 그냥 읽어보는 것도 좋아요.. 2번째 읽을 때는 더 잘 이해되
니까
119
Q&A
사전 질문
• BoB 지원 시 기존 BoB 수료자나 보안업계에 현업으로 일하고 있는 사람의 추천
서가 선발에 중요하다고 들었는데 그러한 인맥을 만들기 위해서는 어떠한 활동
을 하는 게 좋을까요?
• 추천서가 선발에 중요? -> 알 수 없음
• 추천서 없이 뽑힌 사람도 많고, BoB 가면 다들 자기가 왜 뽑혔는지 모름
• 당시 결론은 솔직히 뽑는 기준을 모르겠다 였습니다...
• 원래 잘 하던 사람도 뽑지만… 열정을 보는 느낌도 좀 있었습니다.
• 저는 일단 필요한 건 다 써봐야지 해서 학부연구생 했던 교수님께 부탁드렸습니다.
• 교수님과 친하게 지냅시다
• 등록금 뽕 뽑아야…(?)
120
Q&A
사전 질문
• 프리랜서와 정직원을 비교하면 어떤가요?
• 원래 저녁형 인간이라 맘대로 일어날 수 있어서 좋습니다
• 회의도 없고 휴가도 내 맘대로~ 컨퍼런스 놀러가서 디지털 노마드~
• 정말 하기 싫은 일은 안 함. 재미없는 타겟은 버립니다.
• 그치만 강제성이 없기 때문에 시간 관리가 어려움
• 저는 주중 하루 6시간은 무조건 일하기로 루틴을 만들고 어떻게든 지키고 있습니다.
• 따박따박 나오는 월급이 주는 정신적 안정감이 없음
• 평범한 자영업자(…)
121
Q&A
사전 질문
• 보안 분야가 다른 it관련 직군들과 비교했을 때 장점이거나 차별화되는 점
이 무엇이라고 생각하시나요?
• 취향에 맞으면 이보다 재밌는 게 없다
• 영원히 퍼즐을 풀 수 있다! 퍼즐을 풀면 돈을 준다!
• 바운티 한다면 랭킹 올리는 재미... 게임하는 것 같음
• 남의 코드 지적하기 너무 즐겁다!
• 자극적이고 흥미로운 사건 사고
• OO 서비스에 몇십억짜리 사고가 터졌다고~ 당장 구경해 당장 분석해
• 물론… 분야 by 분야…
122
Q&A
사전 질문
• 블록체인 개발자가 되는 과정과 평균 급여 및 개발 환경이 궁금합니다
• 급여는 역시 기업 by 기업.. 그래도 최소 4~5천은 주는 곳으로 갑시다
• 블록체인 기업 이상한 데 가면 개발자 1명 뿐인 곳에서 요상한 스캠 프로젝트 해요 조심!!!
• 기술자가 얼마나 있는지 꼭 확인하시고.. 동일 직무 기술자는 몇 명인지…
• 개발환경 국룰?
• Solidity(또는 Rust), Foundry 또는 Hardhat (스마트 컨트랙트)
• Nextjs, React, Vercel (프론트)
• Subgraph ((탈중앙) 백엔드)
• 중앙 서버 필요시 백엔드 서버 (회사 기술 스택에 따라)
• 블록체인 코어라면 Go/Rust
123
Q&A
사전 질문
• 해커가 되려면 개발자가 배우는 기본 프로그래밍 언어에 대해 잘 알고 있어야 하나요? 그
외에 어떤 것들을 공부해야 하는지 알고 싶습니다!
• 프로그래밍 언어에 익숙해서, 모르는 언어가 나와도 대충 논지는 파악할 수 있는 수준 정도 필요
• 타겟이 오픈소스이거나, 사용할 툴 리서치를 할 때 등… 바이너리 뿐만 아니라 소스코드도 꽤 많이 읽기 때문
• 처음 보는 언어/프레임워크를 이용해 잘 만들지는 못 해도 기능이 돌아는 가게 만들 수 있는 수준이면 적절
• 전문 개발자만큼 특정 언어/프레임워크에 정통할 필요는 없음
• 다만 특정 환경/프레임워크에 특화된 해커가 되려면 정통해야 합니다
• Ex) Unity로 만든 게임 해킹에 특화된다면 Unity를 잘 알아야 한다.
• Ex) 커널 해킹을 할 거면 커널 소스코드(C언어)를 읽어야 한다.
• 그 외 공부할 것들은 발표에서 얘기한 듯!
124
Q&A
사전 질문
• 보안 공부를 하기전에 선행되어야하는 공부가 무엇이 있을까요?
• 개발 공부
• 기본적인(개발을 하든 해킹을 하든 뭘 하든 공유하는) 컴퓨터 공학 지식
• 자료구조
• 알고리즘
• 네트워크
• 컴퓨터 구조
• OS
• DB
125
Q&A
현장 질문
출처: https://www.youtube.com/watch?v=sZtGp-uqtuA
126
Q&A
부록
분야별 입문 커리큘럼
괜찮은 책/사이트 리스트
127
리버싱 커리큘럼
https://www.slideshare.net/JinkyoungKim8/presentations
OS/시스템 프로그래밍은 포너블에도 베이스가 됨
128
리버싱 커리큘럼
https://www.slideshare.net/JinkyoungKim8/presentations
129
리버싱 커리큘럼
https://www.slideshare.net/JinkyoungKim8/presentations
+ Linux ELF 리버싱 (CTF에서는 주로 ELF가 나옴… 하지만 입문하기엔 윈도우가 자료가 많음)
+ Frida 사용법 익히기 (https://frida.re/docs/home/ )
+ 동적 분석 (악성코드 분석 관련 책 읽기)
+ 분석하길 원하는 플랫폼으로 특화(윈도우/리눅스/ARM/안드로이드/iOS/…)
130
포너블 커리큘럼
https://www.slideshare.net/JinkyoungKim8/presentations
+ Heap overflow: https://github.com/shellphish/how2heap 하나씩 풀며 공부
+ Fuzzing, Taint analysis, Symbolic execution 등 키워드 리서치 하며 공부
131
웹해킹 커리큘럼
• 1. 웹 개발 기본 지식 익히기
• 네트워크 기본 지식 – HTTP, TCP/IP
• 웹 개발해보기
• 프론트, 백 가리지 말고 짜보자
• 취약점 공부할 때도 일부러 취약한 사이트를 만들고 공격해보는 방식
으로 연습해보면 이해하기 좋다
• 2. 취약점 종류별로 익히기
• 클라이언트사이드
• XSS
• Prototype pollution
• CSRF
• Open redirect
• Clickjacking
• …
• 서버사이드
• SQLi
• IDOR
• SSRF
• SSTI
• XXE injection
• Logic error
• 인증 관련 취약점
• OS command injection
• Web cache poisoning
• HTTP request smuggling
• Race condition
• NoSQLi
• GraphQL 취약점
• …
• 방어기법 우회하기
• 페이로드 난독화하여 필터링 우회
• 3. 리얼 월드 스타일로 연습하기
• 블랙박스, Recon 부터 시작하는 웹해킹
• 버그헌팅 보고서 읽고 정리
• 리얼월드 취약점 종류를 분류해보며 자료를 쌓아가자
• 블로그든 노션이든 자신만의 데이터를 정리하자!
• 퍼저, 각종 오픈소스 툴을 모아 나만의 툴을 만들자
132
리버싱 추천 책
• 리버싱 핵심 원리(2012)
• 입문~고급(안티리버싱)까지 꼼꼼하게 다룬다. Windows 기반. 오래된 게 아쉬움
• 리버스 엔지니어링: 파일 구조 편 (2016)
• Windows PE 파일 구조에 대해 아주 자세하게 다룬다.
• 리버스 엔지니어링: 디버거 편 (2017)
• 리눅스 바이너리 분석 (2016)
• Linux ELF 파일 분석
• 실전 악성코드와 멀웨어 분석 (2013)
• 악성코드 분석 시작하기 (2020)
133
포너블 추천 책
• 해킹 : 공격의 예술 (2010)
• 실습용 CD가 있던 것 같은데 잘 안돌아갔던 것 같다.. 읽어볼만 함
• 윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇 (2019)
• 흔치 않은 윈도우 포너블 책. 윈도우에만 제한된 게 아니라 기본적인 방어기법과 우
회 방법에 대한 설명도 우수
134
웹해킹 추천 책
• 웹 해킹 & 보안 완벽 가이드 (2014)
• 웹 해킹 전체적인 그림을 그리는 데 좋음. 다만 좀 오래됨
• 웹 애플리케이션 보안 (2021)
• HTTP 완벽 가이드 (2014)
• Bug Bounty Playbook Parts 1& 2
• 정찰(Recon)부터 취약점 찾기까지 깔끔하게 정리했음. (원서)
• https://ghostlulz.com/
135
리버싱 관련 사이트
• https://tuts4you.com/
• 외국 리버싱 커뮤니티
• 문제 뿐만 아니라 리버싱과 관련된 여러 자료들을 얻을 수 있음
• https://codeengn.com/
• 한국 리버싱 커뮤니티. 매년 컨퍼런스 주최
• 문제 뿐만 아니라 리버싱과 관련된 여러 자료들을 얻을 수 있음
• Windows 중심으로 있음
• https://dreamhack.io/lecture/roadmaps/all/reverse-engineering
• 티오리에서 운영하는 리버싱 강의/문제
• http://reversing.kr/
• 리버싱 문제
136
포너블 관련 사이트
• http://pwnable.kr/ https://pwnable.tw https://pwnable.xyz/ https://overthewire.org
https://www.hackerschool.org/HS_Boards/zboard.php?id=HS_Notice&no=1170881885
• 포너블 워게임 모음
• https://github.com/shellphish/how2heap
• 힙 관련 문제 모음. 하나씩 풀면서 힙 취약점 공부하면 됨
• https://dreamhack.io/lecture/roadmaps/all/system-hacking
• 티오리에서 운영하는 포너블 강의/문제
• https://github.com/cpuu/awesome-fuzzing
• 퍼징 관련 링크 모음
137
웹해킹 관련 사이트
• https://github.com/qazbnm456/awesome-web-security
• 웹 보안 관련 링크 모음
• https://portswigger.net/web-security
• 분류와 개념 설명이 가장 잘 되어있는 웹 해킹 문제 사이트.
• https://www.hackerone.com/
• 버그바운티 플랫폼. 제출된 보고서가 공개되곤 함.
• 리얼월드 공부할 때 이곳에 공개되는 보고서를 읽는다. 다른 종류도 있긴 하지만 대부분이 웹 취약점
• https://dreamhack.io/lecture/roadmaps/all/web-hacking
• 티오리에서 운영하는 웹해킹 강의/문제
• https://webhacking.kr
• 여러 종류의 웹해킹 문제 모음
• https://los.rubiya.kr
• SQLi 문제 모음
• https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
• XSS 페이로드 아주 정리 잘 되어있음
• https://github.com/OWASP/wstg
• OWASP WSTG (OWASP Web Security Testing Guide): 웹 보안 테스트를 할 때 참고할만한 가이드. 여러가지 취약점을 분류해 두었으니 테스트할 때 참고
138
기타 관련 사이트
• https://hackerschool.org/Sub_Html/HS_Posting/?uid=46
• 임베디드(하드웨어) 해킹 자료 모음 (BoB 멘토 작성)
• https://ctftime.org/
• 전세계 CTF 리스트 및 일정표
• https://cryptohack.org/
• 암호학 공부 사이트
• https://cryptozombies.io/
• 블록체인 개발 공부 사이트
• https://youtu.be/umepbfKp5rI
• 블록체인 개발 공부 유튜브 (Patrick Collins)
• https://nodeguardians.io/ https://ethernaut.openzeppelin.com/
https://www.damnvulnerabledefi.xyz/ https://www.codehawks.com/
• 블록체인 워게임/CTF 사이트
139

More Related Content

What's hot

Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...
Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...
Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...Vietnam Open Infrastructure User Group
 
Improving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux ConfigurationImproving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux ConfigurationAlex Moundalexis
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA Terry Cho
 
Modul SO : Threads
Modul SO : ThreadsModul SO : Threads
Modul SO : ThreadsDEDE IRYAWAN
 
Log Yonetimi ve SIEM Kontrol Listesi
Log Yonetimi ve SIEM Kontrol Listesi Log Yonetimi ve SIEM Kontrol Listesi
Log Yonetimi ve SIEM Kontrol Listesi Ertugrul Akbas
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019devCAT Studio, NEXON
 
GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例Fumihiko Shiroyama
 
IPv6 を始めてみた
IPv6 を始めてみたIPv6 を始めてみた
IPv6 を始めてみたmiki koganei
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기Kiyoung Moon
 
192.0.0.4 on android
192.0.0.4 on android192.0.0.4 on android
192.0.0.4 on android@ otsuka752
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현YEONG-CHEON YOU
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようShohei Okada
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyYahoo!デベロッパーネットワーク
 
Massive service basic
Massive service basicMassive service basic
Massive service basicDaeMyung Kang
 
모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415SeungBeom Ha
 
Ipv6 소켓프로그래밍
Ipv6 소켓프로그래밍Ipv6 소켓프로그래밍
Ipv6 소켓프로그래밍Heo Seungwook
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례kisu kim
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbieDaeMyung Kang
 

What's hot (20)

Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...
Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...
Room 2 - 6 - Đinh Tuấn Phong - Migrate opensource database to Kubernetes easi...
 
Lock free queue
Lock free queueLock free queue
Lock free queue
 
Improving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux ConfigurationImproving Hadoop Cluster Performance via Linux Configuration
Improving Hadoop Cluster Performance via Linux Configuration
 
애자일 스크럼과 JIRA
애자일 스크럼과 JIRA 애자일 스크럼과 JIRA
애자일 스크럼과 JIRA
 
Modul SO : Threads
Modul SO : ThreadsModul SO : Threads
Modul SO : Threads
 
Log Yonetimi ve SIEM Kontrol Listesi
Log Yonetimi ve SIEM Kontrol Listesi Log Yonetimi ve SIEM Kontrol Listesi
Log Yonetimi ve SIEM Kontrol Listesi
 
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
홍성우, 게임 서버의 목차 - 시작부터 출시까지, NDC2019
 
GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例GCP HTTPロードバランサ運用例
GCP HTTPロードバランサ運用例
 
IPv6 を始めてみた
IPv6 を始めてみたIPv6 を始めてみた
IPv6 を始めてみた
 
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
유니티 + Nodejs를 활용한 멀티플레이어 게임 개발하기
 
192.0.0.4 on android
192.0.0.4 on android192.0.0.4 on android
192.0.0.4 on android
 
MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현
MMOG Server-Side 충돌 및 이동처리 설계와 구현
 
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしようPHP-FPM の子プロセス制御方法と設定をおさらいしよう
PHP-FPM の子プロセス制御方法と設定をおさらいしよう
 
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudyネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
ネットワークの自動化・監視の取り組みについて #netopscoding #npstudy
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415모바일 앱(App) 개발 테스트 솔루션 v20160415
모바일 앱(App) 개발 테스트 솔루션 v20160415
 
Ipv6 소켓프로그래밍
Ipv6 소켓프로그래밍Ipv6 소켓프로그래밍
Ipv6 소켓프로그래밍
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
성공적인 Sw사업 수행을 위한 프로세스 프레임워크 및 적용사례
 
webservice scaling for newbie
webservice scaling for newbiewebservice scaling for newbie
webservice scaling for newbie
 

Similar to 해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기

Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1Jinkyoung Kim
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1Jinkyoung Kim
 
Pwnable study basic_3
Pwnable study basic_3Pwnable study basic_3
Pwnable study basic_3Jinkyoung Kim
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1Jinkyoung Kim
 
Linux reversing study_basic_4
Linux reversing study_basic_4Linux reversing study_basic_4
Linux reversing study_basic_4Jinkyoung Kim
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7Jinkyoung Kim
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8Jinkyoung Kim
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversingYoungjun Chang
 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드GangSeok Lee
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9Jinkyoung Kim
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2Wooseok Seo
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)NAVER D2
 
bof기초+rtl+fake_ebp
bof기초+rtl+fake_ebpbof기초+rtl+fake_ebp
bof기초+rtl+fake_ebpone_two_12
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기NAVER Engineering
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debuggingJongwon Han
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초Yu Yongwoo
 
PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자Young Min Shin
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기NAVER D2
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2Jinkyoung Kim
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 

Similar to 해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기 (20)

Windows reversing study_basic_1
Windows reversing study_basic_1Windows reversing study_basic_1
Windows reversing study_basic_1
 
Pwnable study basic_1
Pwnable study basic_1Pwnable study basic_1
Pwnable study basic_1
 
Pwnable study basic_3
Pwnable study basic_3Pwnable study basic_3
Pwnable study basic_3
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
Linux reversing study_basic_4
Linux reversing study_basic_4Linux reversing study_basic_4
Linux reversing study_basic_4
 
Windows reversing study_basic_7
Windows reversing study_basic_7Windows reversing study_basic_7
Windows reversing study_basic_7
 
Windows reversing study_basic_8
Windows reversing study_basic_8Windows reversing study_basic_8
Windows reversing study_basic_8
 
6. code level reversing
6. code level reversing6. code level reversing
6. code level reversing
 
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
[2012 CodeEngn Conference 07] manGoo - Exploit Writing Technique의 발전과 최신 트랜드
 
Windows reversing study_basic_9
Windows reversing study_basic_9Windows reversing study_basic_9
Windows reversing study_basic_9
 
Windows Debugging Technique #2
Windows Debugging Technique #2Windows Debugging Technique #2
Windows Debugging Technique #2
 
[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)[Kerference] 시작! 리버싱 - 김종범(KERT)
[Kerference] 시작! 리버싱 - 김종범(KERT)
 
bof기초+rtl+fake_ebp
bof기초+rtl+fake_ebpbof기초+rtl+fake_ebp
bof기초+rtl+fake_ebp
 
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
200819 NAVER TECH CONCERT 07_신입 iOS 개발자 개발업무 적응기
 
20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging20170813 django api server unit test and remote debugging
20170813 django api server unit test and remote debugging
 
C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초C 언어 스터디 01 - 기초
C 언어 스터디 01 - 기초
 
PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
제 5회 D2 CAMPUS SEMINAR - Swift로 만든 serverframework 개발기
 
Pwnable study basic_2
Pwnable study basic_2Pwnable study basic_2
Pwnable study basic_2
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 

More from Jinkyoung Kim

Axelar 22.04 bughunting case study
Axelar 22.04 bughunting case studyAxelar 22.04 bughunting case study
Axelar 22.04 bughunting case studyJinkyoung Kim
 
Angle Protocol bughunting case study
Angle Protocol bughunting case studyAngle Protocol bughunting case study
Angle Protocol bughunting case studyJinkyoung Kim
 
Nouns DAO bughunting case study
Nouns DAO bughunting case studyNouns DAO bughunting case study
Nouns DAO bughunting case studyJinkyoung Kim
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introductionJinkyoung Kim
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3Jinkyoung Kim
 
Linux reversing study_basic_2
Linux reversing study_basic_2Linux reversing study_basic_2
Linux reversing study_basic_2Jinkyoung Kim
 
Linux reversing study_basic_1
Linux reversing study_basic_1Linux reversing study_basic_1
Linux reversing study_basic_1Jinkyoung Kim
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6Jinkyoung Kim
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5Jinkyoung Kim
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4Jinkyoung Kim
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3Jinkyoung Kim
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2Jinkyoung Kim
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2Jinkyoung Kim
 

More from Jinkyoung Kim (16)

Axelar 22.04 bughunting case study
Axelar 22.04 bughunting case studyAxelar 22.04 bughunting case study
Axelar 22.04 bughunting case study
 
Angle Protocol bughunting case study
Angle Protocol bughunting case studyAngle Protocol bughunting case study
Angle Protocol bughunting case study
 
Nouns DAO bughunting case study
Nouns DAO bughunting case studyNouns DAO bughunting case study
Nouns DAO bughunting case study
 
Web hacking introduction
Web hacking introductionWeb hacking introduction
Web hacking introduction
 
Linux reversing study_basic_3
Linux reversing study_basic_3Linux reversing study_basic_3
Linux reversing study_basic_3
 
Linux reversing study_basic_2
Linux reversing study_basic_2Linux reversing study_basic_2
Linux reversing study_basic_2
 
Linux reversing study_basic_1
Linux reversing study_basic_1Linux reversing study_basic_1
Linux reversing study_basic_1
 
Python
PythonPython
Python
 
System+os study 6
System+os study 6System+os study 6
System+os study 6
 
System+os study 4
System+os study 4System+os study 4
System+os study 4
 
Windows reversing study_basic_6
Windows reversing study_basic_6Windows reversing study_basic_6
Windows reversing study_basic_6
 
Windows reversing study_basic_5
Windows reversing study_basic_5Windows reversing study_basic_5
Windows reversing study_basic_5
 
Windows reversing study_basic_4
Windows reversing study_basic_4Windows reversing study_basic_4
Windows reversing study_basic_4
 
Windows reversing study_basic_3
Windows reversing study_basic_3Windows reversing study_basic_3
Windows reversing study_basic_3
 
Windows reversing study_basic_2
Windows reversing study_basic_2Windows reversing study_basic_2
Windows reversing study_basic_2
 
Assembly 스터디 2
Assembly 스터디 2Assembly 스터디 2
Assembly 스터디 2
 

해커가 되고 싶은 자는 나에게... 정보보안 입문과 길 찾기

  • 1. 해커가 되고 싶은 자는 나에게… 정보보안 입문과 길 찾기 contact@jayjay.app
  • 2. 버그 바운티 헌터? • 현상금 사냥꾼? • A.K.A 프리랜서 해커? • 버그바운티 • 취약점을 찾아 신고하면 포상금을 주는 것 • 버그바운티 플랫폼에 기업들이 자신의 취약점을 찾아달라고 등록한다. • https://www.hackerone.com/ • https://code4rena.com • 취약점을 찾고, 보고서를 작성해서 제출 2 Who am I?
  • 3. 목차 • 보안 분야의 대략적인 구조 • 분야별 소개 및 커리큘럼 • 리버싱 • 포너블 • 웹해킹 • 마무리 • Q&A 3
  • 4. 보안 분야의 대략적인 구조 보안 분야는 어떻게 나누어질까? 4
  • 5. 보안 분야의 대략적인 구조 • 크게 레드팀과 블루팀으로 나뉜다 • 간단히 말하면 공격 vs 방어 5
  • 6. 레드팀 • 공격 가능한 지점(취약점)을 찾아낸다 • 공격 경로는 여러가지 • 그냥 모든 분야? 보안 분야의 대략적인 구조 대상 분야 웹서비스 웹 해킹 실행 프로그램 시스템 해킹(포너블) 임베디드 임베디드 해킹 모바일 앱 앱 해킹 블록체인 프로그램 블록체인 해킹 사람의 보안 의식 소셜 엔지니어링 공개되어 있는 데이터를 수집해 탐색 OSINT 6
  • 7. 블루팀 • 프로그램을 안전하게 작성하여 취약점이 없도록 하거나 공격을 완화/차단 • 이미 발생한 보안 사고에 대한 사후 분석 보안 분야의 대략적인 구조 방법 분야 애초에 취약하지 않게 짠다 시큐어 코딩을 하는 개발자 보안 사고 사후 분석 (원인 분석 및 대비, 보고) 침해사고 대응 팀(CERT) 범죄 증거 수집 포렌식 공격을 탐지/차단하는 프로그램 작성 침입 탐지/방지/차단 시스템 기업에게 일정 수준 이상의 보안을 강제 정보 보호 인증 악성코드로부터 유저를 보호 악성코드 분석, 백신 개발 7
  • 8. 너무 광범위하다.. • 보안은 어느 분야이든 적용되기 때문 • 기술이 있다면 취약점이 있다 • 해킹은 기본적으로 제작자가 의도하지 않은 일을 하는 것 • 보안 분야는 이를 방어하거나 방어를 뚫고 하는 것 • 분야가 정확히 나눠지기 보다는 유기적으로 얽혀 있음 • Ex. 서버와의 통신을 웹에서만 하지 않음. 앱도 하는데? • Ex. 공격 지점을 찾기 위해 난독화된 코드를 읽어야 한다면 리버싱 기술이 필요함 8
  • 9. 너무 광범위하다.. • 일단 한 파트씩 쪼개서 찍먹해보고 선택하자 • 어느 한 파트에 익숙해지면 다른 파트를 익힐 때도 이해도가 깊어질 것 • 보안 전문 일을 하지 않더라도 알아 두면 좋다 • 안전한 프로그램을 작성하기 위해 • 시야가 넓어짐. 개발/디버깅 시 보다 다양한 방법을 이용해 볼 수 있음 9
  • 10. 보안 기술의 큰 분류 • 리버싱 • 리버스 엔지니어링. 컴파일된 소프트웨어를 역으로 분석 • 포너블 • 컴파일된 소프트웨어 공격 • 유저가 흔히 사용하는 소프트웨어부터 Apache 서버, OS 등까지 • 웹해킹 • 웹서비스를 공격. 프론트/백엔드에 대한 공격 • 크립토 • 암호학 • 포렌식 • 공격에 대한 분석 및 대응. 데이터 복구, 증거 수집, 침해대응 등 10
  • 11. 오늘 알아볼 파트 • 리버싱 • 리버스 엔지니어링. 컴파일된 소프트웨어를 역으로 분석 • 포너블 • 컴파일된 소프트웨어 공격 • 유저가 흔히 사용하는 소프트웨어부터 Apache 서버, OS 등까지 • 웹해킹 • 웹서비스를 공격. 프론트/백엔드에 대한 공격 • 크립토 • 암호학 • 포렌식 • 공격에 대한 분석 및 대응. 데이터 복구, 증거 수집, 침해대응 등 11
  • 13. 리버싱이란? • 리버싱이란? • 개발 시, 하이레벨 언어를 컴파일하면 코드를 기계어로 변환 • 리버싱은 이를 거꾸로 하는 것 (이미 컴파일 된 기계어를 해석) • 디컴파일러를 사용해 하이레벨 언어 형태까지 변환할 수 있지만, 어셈블리어 레벨에서 읽 을 줄 알아야 한다 Assembly 기계어(Binary) 하이 레벨 언어 decompile Disassemble Assemble Compile Reversing 디버깅 로직 분석 악성코드 분석 키젠 및 크랙 생성 <-> 라이선스 인증 로직 개선 DRM 우회 <-> DRM 개선 게임 핵 개발 <-> 게임 핵 방어 … 13
  • 16. 프로그램 파일 포맷 • 실행파일은 일정한 포맷에 맞춰 생성된다. • 기계어 뿐만 아니라 실행에 필요한 여러가지 메타데이터가 포함 • 여러가지 메타데이터 분석/파악 필요 • 또한 .jpg, .docx 등 각 확장자들은 자신만의 포맷이 있음 • 자신이 분석할 파일 포맷을 파악해야 함 리버싱이란? 16
  • 17. 리버싱 문제를 풀어보자 • 간단한 문제와 함께 알아보자! • https://ch.codeengn.com/ Basic RCE L01 프로그램을 실행하면 위와 같은 창이 뜬다. 이 창이 뜨지 않도록 하는 게 문제의 요구사항이다. 17
  • 18. 디스어셈블 리버싱 문제를 풀어보자 디버거를 이용하여 바이너리를 디스어셈블 한다. 차근차근 실행해보며 어느 순간에 왜 창이 뜨는지 찾아보자 18
  • 19. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 이 줄을 실행하니 원하지 않는 창이 뜬다. 이 명령어는 어떻게 실행하게 되는가? 19
  • 20. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 바로 위 JE에서 점프하지 않으면 실패 Message Box를 띄운다. 즉, 점프를 시키면 실패 문장을 띄우지 않겠다. 20
  • 21. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 어떻게 하면 점프를 하는가? => 점프는 보통 조건문이다. => 무엇을 비교하는가? 21
  • 22. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 JE위에 CMP가 있다. 즉, EAX와 ESI의 값이 동일하면 점프를 한다. EAX와 ESI에 들어있는 값의 근원을 찾아보자. 22
  • 23. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 GetDriveTypeA 함수를 실행하면 EAX가 3으로 설정된다. ESI는 0으로 초기화되어 있다. 23
  • 24. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 GetDriveTypeA 함수와 CMP코드 사이의 코드를 살펴보자. ESI를 총 3만큼 더하고, EAX를 총 2만큼 뺀다. EAX – 2 == 3 이면 점프를 하므로, 원치 않는 메시지를 띄우지 않기 위해서는 EAX(GetDriveTypeA 의 리턴값)은 5여야 한다. 24
  • 25. 디버거로 실행해보며 로직 분석하기 리버싱 문제를 풀어보자 if(GetDriveTypeA("c:") - 2 == 3){ // success } else{ // fail // 실패 창을 띄움 } 즉, 이 바이너리는 다음과 같은 코드일 것 25
  • 26. GetDriveTypeA 함수 • GetDriveTypeA함수: Windows API • Windows API는 검색해보면 문서를 찾을 수 있다. • https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getdrivetypea • 경로를 넣으면 이 경로가 어떤 드라이브인지 결과를 리턴하는 함수 • 해당 경로가 CD-ROM이면 5를 리턴 리버싱 문제를 풀어보자 26
  • 27. GetDriveTypeA 함수 • GetDriveTypeA 함수 인자로 “c:”라는 문자열을 넣었다 • 실행 컴퓨터의 C 드라이브는 하드 디스크이므로 3을 리턴한 것! 리버싱 문제를 풀어보자 27
  • 28. 어떻게 하면 결과를 변경할 수 있을까? • 여러가지 방법으로 우회 가능하다 • 내 맘대로 점프하면 좋겠다 • 점프문 조작 • CD-ROM으로 인식하게 하면 좋겠다 • 함수 인자를 CD-ROM의 경로로 수정 • C 드라이브가 CD-ROM으로 잡히게 하는 건 어때? • 드라이브 매핑 변경? • 결과에 상관 없이 무조건 ESI == EAX 가 되도록 하면 좋겠다 • ESI == EAX가 되도록 수정 (ESI = EAX;) • GetDriveTypeA 의 리턴 값을 조작하여 5를 리턴하게 하면 좋겠다 • API 후킹으로 API 리턴 값 조작 리버싱 문제를 풀어보자 28
  • 29. 로직을 변경하여 조작된 바이너리 제작 리버싱 문제를 풀어보자 CMP하기 전에 ESI에 EAX의 값을 대입하도록 수정했다. (ESI = EAX;) 바이너리를 수정해 저장하면 업데이트된 EXE 파일을 얻을 수 있다. 이 EXE를 실행하면 로직을 우회하여 성공 창이 뜨는 것을 볼 수 있다. 29
  • 30. 바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까? • 보안을 위해 조작이 가해진 소프트웨어를 사용하지 않도록 방지하곤 함 • 소프트웨어에 서명 • 바이너리가 변경되어 서명과 일치하지 않으면 실행하지 않음 • 패킹/프로텍터 이용 • 실행 파일의 크기를 줄이기 위해 바이너리를 압축 • 리버싱을 방지하기 위해 코드를 해석하기 어렵게 뒤섞음 • 이를 우회하는 방법이 있을까? 리버싱 문제를 풀어보자 30
  • 31. 바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까? • API • 사용자 어플리케이션이 시스템 자원(메모리, 파일, 네트워크 등)을 사용하고 싶을 때 직접 접근 불가 • OS가 관리하는 자원 • 여러가지 이유로 사용자 어플리케이션이 직접 접근할 수 없게 막아 둠 • 이를 이용하려면 OS에게 요청해야 함 • 시스템 API 호출 또는 시스템콜을 통해 요청 리버싱 문제를 풀어보자 31
  • 32. 바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까? • API 후킹 • API 호출을 중간에 가로채서 제어권을 얻어내는 것 • API 호출 전/후에 임의의 코드를 실행시킬 수 있다. • API에 넘어온 파라미터 혹은 리턴 값을 엿보거나 조작할 수 있다. • API 호출 자체를 취소시키거나 실행 흐름을 변경시킬 수 있다. • Frida와 같은 툴을 이용하면 간편하게 후킹 가능 리버싱 문제를 풀어보자 32
  • 33. 바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까? • API 후킹 예 • 메모장 저장 버튼을 누르면 CreateFile API 호출 • 정상시 kernel32.dll의 CreateFile 함수 실행 • API를 후킹한다면? • CreateFile함수를 호출 시 공격자가 끼워 넣은 코드 가 먼저 호출됨 • 끼워넣은 코드에서 원본 API(CreateFile)를 호출 • API의 결과를 받고, 결과를 조작해 리턴 리버싱 문제를 풀어보자 출처: https://reversecore.com/54 33
  • 34. 바이너리를 조작하지 않고 원하는 작업을 할 방법은 없을까? • GetDriveTypeA API를 후킹하고 리턴값을 5로 조작하면? • 바이너리를 조작하지 않고도 문제를 해결할 수 있다! 리버싱 문제를 풀어보자 34
  • 35. 1. 배경지식을 익힌다 • 로우레벨 언어로 개발하고 하고 뜯어보기 • C로 작성한 실행 파일을 디버거로 뜯어보자 • 처음에는 최적화 옵션, 보안 옵션을 전부 꺼서 직관적인 바이너리로 볼 것 • 내 코드가 어셈블리어로 어떻게 번역되어 있는지 비교해보자 • OS, 컴퓨터시스템에 대한 배경지식이 필요 • 후킹 등 고급 리버싱 기술을 이해하기 위함 어떻게 공부하나요? 35
  • 36. 2. 여러가지 문제를 풀어보자 • 워게임 문제를 풀며 분석 실력과 끈기를 기르자 • 디컴파일된 코드를 읽어 로직을 역으로 세우는 일을 연습하는 것이 목적 • 리버싱은 인내심이 필요하다 • 인내심도 연습해야 길러진다! • 어디까지 물고 늘어져야 일이 완료되는지 감각을 얻어야 • 인내심 수련을 한다는 마음으로 차근차근 읽어보자 어떻게 공부하나요? 36
  • 37. 3. 안티리버싱을 우회해보자 • 안티리버싱 • 실제 프로덕트/악성코드는 프로그램을 분석당하지 않도록 방해하는 기술이 적용됨 • 여러가지 안티 리버싱을 우회하는 방법을 익히자 • 어떻게 리버싱을 막는지 공부하고 우회방법을 공부 • 직접 우회 툴을 짜보기 어떻게 공부하나요? 37
  • 38. 4. 각종 기술/툴을 도입해보자 • IDA, Frida, 각종 디컴파일러, 분석 툴.. • 안티 리버싱 우회, 루팅 확인 우회 등 • 필요한 상황에 따라 이를 우회할 툴을 찾거나 툴에 끼워 사용할 스크립트를 짠다 어떻게 공부하나요? 38
  • 39. 5. 원하는 분야를 선택해 특화 • 리버싱 입문은 Windows가 자료가 많기 때문에 Windows 추천한 것 • 원하는 분야를 선택해 배경지식, 도메인에 특화된 분석 기술을 익힌다 • 리눅스 바이너리.. ARM… 안드로이드 APK.. 난독화 된 JS.. EVM.. 어떻게 공부하나요? 39
  • 41. 포너블이란? • 프로그램의 취약점을 찾아 공격 • 대상은 주로 컴파일 된 소프트웨어 • 유저가 흔히 사용하는 소프트웨어부터 Apache 서버, OS 등까지 • 관리자 권한을 얻어 시스템을 장악, 의도치 않은 행동을 하게 함 • Ex) 프로그램에 특정한 입력 값을 넣으면 마음대로 셸을 실행시키고, 이 컴퓨터에 외 부에서 접속해 자유롭게 명령을 내릴 수 있다! • 리버싱과 밀접한 관련이 있음 • 취약점을 찾기 위해 프로그램을 뜯어볼 줄 알아야 41
  • 42. BOF (Buffer overflow) • 말 그대로 버퍼가 넘치는 것 • 원래 사용하려던 메모리를 벗어나 다른 데이터까지 침범, 오염시킴 • 대개 사용하는 버퍼 크기를 체크하지 않는 위험한 함수로 인해 발생 • Ex) gets, scanf • 메모리 기반 취약점의 시작 지점 • 어떻게 문제가 발생하는지 살펴보자! 42 포너블이란?
  • 43. 지역변수 • 지역변수는 시스템 스택에 저장된다 • 시스템 스택에 대해 알아보자 43 포너블이란? – BOF에 대하여 프로그램의 소스코드 저장 초기화되지 않은 전역 변수 저장 (위치 예약) 초기화된 전역 변수 저장 가변적 동적할당에 사용 가변적 지역변수 저장 높은 주소 낮은 주소 전역변수 지역변수
  • 44. 스택 자료구조 • 스택이란 무엇인가? • 후입선출 (Last-In-First-Out, LIFO)로 관리되는 자료구조 44 포너블이란? – BOF에 대하여
  • 46. 시스템 스택 • 시스템 스택은 스택 프레임으로 관리 • 함수는 자신 만의 스택 영역을 가질 수 있음 • 각 함수가 자신의 임시 저장영역(지역변수 저장)을 가질 수 있게 함 • 각 함수의 스택 영역에 저장되는 값 • 함수 호출 파라미터 • 함수를 마치고 돌아갈 주소(리턴 주소) • 지역변수 • 스택 프레임을 사용해 각 함수를 위한 스택을 생성, 함수를 마치면 파괴해 스택을 관리 46 포너블이란? – BOF에 대하여
  • 47. 시스템 스택 • 시스템 스택을 관리하는 레지스터 : ESP와 EBP • EBP는 해당 스택 프레임의 바닥 주소를 가리킨다. (스택 프레임의 시작 지점) • EBP레지스터는 하나 밖에 없음 • 새로운 스택 프레임을 생성할 때(함수 내부에서 함수 호출 시) 항상 EBP를 백업해야 함 • 함수 종료 후 백업해 둔 EBP 값을 이용해 이전 함수의 스택으로 복귀 • ESP는 확보된 스택의 꼭대기 주소를 가리킨다. • EBP = 0x1000, ESP = 0x800 이라면 이 함수는 0x200 만큼의 스택을 사용하고 있는 것 • 스택은 주소가 낮아지는 방향으로 자라기 때문에 ESP의 주소가 더 작음 47 포너블이란? – BOF에 대하여
  • 48. ESP/EBP와 스택 프레임 48 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 EBP가 가리키는 주소 ESP가 가리키는 주소 Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 49. ESP/EBP와 스택 프레임 49 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 EBP가 가리키는 주소 ESP가 가리키는 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 50. ESP/EBP와 스택 프레임 50 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 EBP가 가리키는 주소 ESP가 가리키는 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 51. ESP/EBP와 스택 프레임 51 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 EBP가 가리키는 주소 ESP가 가리키는 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 52. ESP/EBP와 스택 프레임 52 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 53. ESP/EBP와 스택 프레임 53 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 54. ESP/EBP와 스택 프레임 54 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 55. ESP/EBP와 스택 프레임 55 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 56. ESP/EBP와 스택 프레임 56 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 xx 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 57. ESP/EBP와 스택 프레임 57 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 xx 지역변수 yy 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 58. ESP/EBP와 스택 프레임 58 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 xx 지역변수 yy 지역변수 zz 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 59. ESP/EBP와 스택 프레임 59 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 xx 지역변수 yy 지역변수 zz 지역변수 sum 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 60. ESP/EBP와 스택 프레임 60 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 foobar 함수가 호출되기 전 EBP 백업 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 61. ESP/EBP와 스택 프레임 61 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 foobar 함수가 끝나고 돌아갈 리턴 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 62. ESP/EBP와 스택 프레임 62 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 함수 foobar의 인자 99 함수 foobar의 인자 88 함수 foobar의 인자 77 EBP가 가리키는 주소 ESP가 가리키는 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 63. ESP/EBP와 스택 프레임 63 포너블이란? – BOF에 대하여 높은 주소 낮은 주소 EBP가 가리키는 주소 ESP가 가리키는 주소 지역변수 num Main 함수가 호출되기 전에 쓰던 EBP 백업
  • 65. BOF란? 65 포너블이란? 20바이트 크기의 지역변수를 사용 - 컴파일러는 넉넉하게 0xE0(=244)바이트를 확보했음 - 컴파일 결과는 컴파일러, 최적화 옵션에 따라 다름
  • 66. BOF란? 66 포너블이란? 지역변수를 위해 예약한 영역(의 일부) 현재 이전에 이용했던 스택 값 (더미 값)이 있음 백업한 EBP
  • 67. BOF란? 67 포너블이란? buf 배열의 시작 주소(스택 주소)를 scanf 인자로 넣는다 (EBP-1C) [EBP-1C]~[EBP-9] 까지는 buf 를 위한 스택 (20바이트)
  • 69. BOF란? 69 포너블이란? scanf는 버퍼의 크기를 제한하지 않는다. 20글자 이상 입력해서 백업해 둔 EBP와 리턴 주소를 침범했다 -> 원래 이전 EBP 백업이 있던 곳 -> 원래 리턴 주소가 있던 곳
  • 70. BOF란? • 만약 정확하게 버퍼 크기와 스택의 구조를 안다면? • 원하는 지점의 메모리를 변경할 수 있다 • Return Address를 조작 => EIP 조작 • 원하는 코드 실행 • 변수 값 조작 • 함수 파라미터 조작 • … 70 포너블이란?
  • 71. 포너블 문제를 풀어보자 • http://pwnable.kr bof 문제 • 실행 파일(ELF 파일)과 소스코드를 준다. • 서버에서 이 프로그램이 실행 중이다. 9000 포트에 접속해 입력 값을 보내면 프로그램에게 넘긴다. • 서버에서 돌아가는 이 프로그램을 해킹해 서버에 셸을 띄우고, flag를 얻어야 한다. 71
  • 72. 취약점 파악 72 포너블 문제를 풀어보자 • func에 인자로 0xdeadbeef를 주며 호출했다. • func에서, 인자가 0xcafebabe이면 쉘을 실행한다. • => func 함수 호출 인자를 조작하고 싶다 • 어떻게 호출 인자를 조작하지? • 함수 인자는 스택에 있다. • 안전하지 않은 함수 gets가 호출되고 있다. • gets를 이용해 BOF를 일으켜 함수 인자를 조작
  • 73. 디스어셈블하여 정확한 메모리 정보 파악 73 포너블 문제를 풀어보자
  • 74. 스택 확보 : 0x48만큼 EBP 백업 버퍼 시작 주소 : EBP – 2C 함수 인자 주소 : EBP + 8 EBP backup Return address ef be ad de EBP EBP - 48 EBP + 4 EBP + 8 EBP - 44 EBP - 40 EBP - 3C EBP - 38 EBP - 34 EBP - 30 EBP - 2C EBP - 28 EBP - 24 EBP - 20 EBP - 1C EBP - 18 EBP - 14 EBP - 10 EBP - C EBP - 8 EBP - 4 74
  • 75. EBP backup Return address ef be ad de EBP EBP - 48 EBP + 4 EBP + 8 EBP - 44 EBP - 40 EBP - 3C EBP - 38 EBP - 34 EBP - 30 EBP - 2C EBP - 28 EBP - 24 EBP - 20 EBP - 1C EBP - 18 EBP - 14 EBP - 10 EBP - C EBP - 8 EBP - 4 여유 공간 (컴파일러에 따라) 바꾸고 싶은 값 func 파라미터 (4 byte) overflowme 배열에 할당된 공간 (32 byte) 스택 카나리 (12 byte) EBP 백업, 리턴주소 (8 byte) 75
  • 76. Exploit 76 포너블 문제를 풀어보자 • 인자를 조작하여 system("/bin/sh")를 실행한다. 52개의 쓰레기 값 + 0xcafebabe • 리틀 엔디안에 주의 • ->쉘 실행! • 쉘에서 자유롭게 명령어를 입력하여 flag 파일을 찾아 읽었다.
  • 77. 1. 배경지식을 익힌다 • OS, 컴퓨터시스템에 대한 배경지식이 필요 • 로우레벨 수준에서 문제가 발생하므로 • 공격 페이로드를 기계어(어셈블리어)로 짜야 함 • 물론 도와주는 툴이 있긴 하지만.. • 특히 메모리 관련 지식이 중요 • 리버싱을 어느정도 익힌다 • 오픈소스가 아니라면 리버싱이 필요 • 공격이 잘 작동하는지 확인하기 위해.. 공격을 디버깅하기 위해서도 필요 77 어떻게 공부하나요?
  • 78. 2. 취약점 종류별로 간단한 문제 풀기 • 셸코드, 익스플로잇 짜고 공격하는 방법을 익히는 목적 • 취약점과 공격/방어 기법, 우회 방법을 종류별로 익히는 목적 • 나름대로 분류하고 정리하여 자신만의 데이터를 쌓자! • 블로그/노션 등… • 풀이 방법, 문제를 풀면서 조사한 지식들 • 잘 정리해두면 추후 포트폴리오나 뭐라도 할 때 사용할 리소스가 많아진다 78 어떻게 공부하나요?
  • 79. 3. 복잡한 문제 풀기 • 어려운 워게임, CTF를 풀어보며 어려운 문제에 도전해보자 • 취약점 종류에 대한 힌트 없이 바이너리만 들고 취약점을 찾아내는 연습 • 정보가 없이 찾는 연습은 리얼월드 취약점을 찾는 연습도 된다 • 여러가지 툴을 이용해본다. • 오픈소스 뒤져서 괜찮은 툴을 찾기… 편한 툴을 찾아 내 것으로 만들자! • https://github.com/longld/peda • pwntools.com • … 79 어떻게 공부하나요?
  • 80. 4. 리얼월드 분석하기 • 발표되는 CVE나 버그헌팅 보고서 읽기 • 리얼월드에서 발생한 취약점/익스플로잇을 분석 • CVE 찾아보는 사이트 • https://cve.mitre.org • https://www.exploit-db.com : 공격코드 • https://vuldb.com • 버그헌팅 보고서 사이트 • https://hackerone.com : 웹이 메인이긴 하지만 실행 파일 취약점도 검색해보면 있긴 함 • CTF나 워게임에서 보는 것보다 단순하고 일반적인 문제가 빈번하게 발생한다. • 대부분이 개발자의 실수로부터 발생 80 어떻게 공부하나요?
  • 81. 5. 다양한 방법 사용해보기 • Fuzzing/Symbolic execution/Taint analysis 등 다양한 분석 방법 도입 • 취약점을 찾아내는 여러가지 방법을 이용해보자 • 이 시점부터는 논문/원서 찾아보며 리서치 해나가야 함 (한글 자료 별로 없음) • 단순히 툴을 사용하는 것 이상으로, 어떻게 하면 최적화된 분석을 돌릴 지 연구 • 오래 걸리기 때문.. 81 어떻게 공부하나요?
  • 83. 웹해킹이란? • 웹이란? • 우리가 흔히 사용하는 웹서비스 • 크게 프론트엔드와 백엔드로 나뉨 • 프론트엔드 • 유저의 브라우저에서 사용되는 HTML, JS 등 • 브라우저에서 어떻게 사이트를 보여줄지, 유저가 버튼을 눌렀을 때 어떻게 반응할지 등 • 백엔드와 통신, 유저의 요청을 전달하고 백엔드가 전달한 데이터를 화면에 뿌림 • 백엔드 • 서버 및 그와 연동되는 DB 등 • 웹서비스를 위한 데이터 저장/제공, 인증, 비즈니스 로직 구현 등 • 프론트엔드와 통신, 데이터를 전달하거나 유저의 요청을 처리 함 83
  • 84. 클라이언트 사이드 취약점 • 클라이언트 사이드: 프론트엔드(유저의 브라우저)에 영향을 끼치는 취약점 • 유저의 브라우저에 임의의 작업을 시켜 악성 행위를 함 • 유저의 쿠키 등 탈취 (=남의 계정으로 로그인하기) • 유저의 컴퓨터에 악성코드 배포 • 프론트엔드 지식, 일부 백엔드 지식 필요 • Ex) 게시글 페이지에 취약점이 있다. 공격자의 게시글을 읽은 유저의 컴퓨터가 피해 를 입게 된다. 84 웹해킹이란?
  • 85. 서버 사이드 취약점 • 서버 사이드: 서버에 영향을 끼치는 취약점 • 서버 컴퓨터에게 임의의 작업을 시킴 • 서버에 업로드 된 모든 리소스, 서버 코드 탈취, DB 탈취/삭제/조작 • 내부망으로 침투, 다른 서버까지 장악 • 장기적으로 스파이 행위 • 다른 서버를 공격하는 데 사용, 악성코드 배포지로 이용 • 백엔드 지식 필요 • Ex) 게시글을 DB로 저장하는 기능에 취약점이 있다. DB에게 임의의 작업을 시킬 수 있어 존재하는 모든 게시글을 삭제하여 서버에게 피해를 준다. 85 웹해킹이란?
  • 86. XSS • 공격자가 유저의 브라우저에서 임의의 Javascript를 실행하게 함 • 유저의 쿠키 등을 탈취한다면 해당 유저인 척 할 수 있음 86 웹해킹이란? - 클라이언트 사이드 취약점에 대하여 <웹 서버> <사용자> <공격자> 악성 스크립트가 있는 URI 제공 (ex. 메일로 보내기, 악성 게시글 쓰기 등) 2 페이지 요청 3 Response (악성 스크립트 포함) Client 브라우저에서 악성 스크립트 실행 4 1
  • 87. XSS • 유저 또는 다른 유저의 입력 값을 화면에 그대로 보여줄 때 • 값이 끼워 넣어지는 부분의 HTML/JS 문법을 탈출해 임의의 HTML/JS를 끼워 넣는다 • Ex) 회원정보 닉네임을 <script>alert(0)</script> 로 한다면? • <div>안녕하세요, <script>alert(0)</script> 님! </div> 87 웹해킹이란? - 클라이언트 사이드 취약점에 대하여
  • 88. 웹해킹 문제를 풀어보자 - XSS • https://xss-game.appspot.com 3번 • 문제의 목표는 XSS를 통해 alert를 띄우는 것이다. • Image 1, Image 2, Image 3 탭을 누르면 이미지와 상단의 글자가 변경된다. 88
  • 89. Image 탭을 눌렀을 때 반응 관찰 • Image 탭을 눌렀을 때 URL이 변경된다. # 뒤의 숫자가 변경된다. • #3이 붙었을 때, cloud3.jpg 라는 이미지를 가져온다. 89 웹해킹 문제를 풀어보자 - XSS
  • 90. 프론트 소스코드 분석 • 이미지 탭을 누를 시 chooseTab() 함 수 호출 • URL로 접속하여 페이지에 접속한 경우 • # 문자 뒤의 값을 파싱해 chooseTab() 의 인자로 하여 호출한다. 90 웹해킹 문제를 풀어보자 - XSS
  • 91. 프론트 소스코드 분석 • chooseTab() 함수는 입력된 인자로 img 태그를 작성, HTML에 넣는다. 91 웹해킹 문제를 풀어보자 - XSS
  • 92. 테스트 • # 뒤에 임의의 글자를 써보자 • asdf 를 넣으니 cloudasdf.jpg 파일을 이미지 경로로 설정한다. • 이 경로에는 이미지가 없어 이미지가 뜨지 않았다. • 즉, 입력 값이 img 태그 경로에 그대로 반사된다. 92 웹해킹 문제를 풀어보자 - XSS
  • 93. Exploit • html += "<img src='/static/level3/cloud" + num + ".jpg' />"; • 앞의 따옴표를 닫고, 원하는 페이로드를 넣고, 다시 .jpg'를 처리하면 자연스러운 img 태그를 완성할 수 있다. (HTML을 깨트리지 않음) • 0' onerror=alert(1) foo=' 라는 페이로드를 넣었다. • "<img src='/static/level3/cloud0' onerror=alert(1) foo='.jpg' />"; 93 웹해킹 문제를 풀어보자 - XSS
  • 94. Exploit • /static/level3/cloud0 라는 경로에 파일이 없어 img 태그는 랜더링 시 에 러를 발생 • 임의로 끼워 넣은 onerror 핸들러에서 alert를 띄움(원하는 JS 실행) 웹해킹 문제를 풀어보자 - XSS 94
  • 95. SQLi • DB 쿼리에 임의의 쿼리를 끼워 넣어 임의의 작업 실행 • DB에서 데이터를 탈취/추가/수정/삭제 하거나 커맨드 인젝션 등으로 공격을 심화 • Ex) user_supplied_input 이 "some_trash_value" OR 1 = 1 라면? • SELECT id FROM vuln_table WHERE vuln = "some_trash_value" OR 1 = 1 • 원래는 vuln_table 에서 vuln 필드의 값이 유저 입력 값인 것을 조회, 일치하는 행의 id를 리턴하라는 의미 • 1=1이면(이것은 항상 참) 해당하는 id를 리턴하라는 쿼리로 변경됨 If (true) 나 마찬가지 95 웹해킹이란? – 서버사이드 취약점에 대하여
  • 96. 웹해킹 문제를 풀어보자 - SQLi • https://los.rubiya.kr • 문제의 서버 코드(PHP)를 준다. 여러 조건을 우회하며 문제를 풀어가야 한다. • 리얼월드에서는 소스코드 없이 서버의 반응을 통해 추측하거나, 에러 로그 유출 등을 통해 조건을 우회해야 함 • Gremlin 문제 (1번 문제) • prob, _, ., () 등의 문자는 사용할 수 없도록 필터링한다. 96
  • 97. 쿼리 분석 • $query = "select id from prob_gremlin where id='{$_GET[id]}' and pw='{$_GET[pw]}'"; • URL 파라미터 id와 pw를 이용하여 SQL 쿼리를 생성, 실행한다. • DB상에서 조회한 id와 pw가 매칭되면 $result에 결과가 리턴된다. • 즉, 로그인 기능이다. 하지만 아는 id도 pw도 없는데? 97 웹해킹 문제를 풀어보자 - SQLi
  • 98. Exploit • 아는 계정과 비밀번호가 없어도 무조건 쿼리 결과가 있도록 하려면? • Where문을 무조건 참으로 만들자! 모든 행이 조건에 맞도록 하자! • select id from prob_gremlin where id='랜덤값' and pw='랜덤값' or '1'='1'; • '1'='1' 이 항상 참이므로, Where문은 항상 참이 된다. 따라서 모든 행이 선택될 것이다. • mysql_fetch_array는 그 중 하나의 행을 리턴한다. (보통 반복문을 이용해 한 행 씩 꺼내 사용) 98 웹해킹 문제를 풀어보자 - SQLi
  • 99. 1. 웹개발을 해본다 • 기술을 충분히 이해해야 기술을 어떻게 악용할 지 아이디어를 낼 수 있음 • 만들다 보면 어떤 취약점이 왜 발생하는지 이해하기 쉽다 • 웹은 블랙 박스 테스트가 많음 • 서버의 반응만 보고 서버 코드를 추측할 수 있어야 한다. 그러려면 웹개발의 맥락을 이해해야 함 • 웹은 굉장히 광범위한 기술 스택을 이용함 • 각 서버/프론트 프레임워크의 디테일을 하나하나 이해 (X) • 너무 많아서&트렌드가 빠르게 변해서 모든 걸 파악하긴 어려움 • 그래도 메인으로 사용하는 프레임워크가 있다면 좋다. 이왕이면 유명한 것.. • 근본적인 기술을 이해 (O) • Ex) API 서버 만들어보기. REST API/GraphQL/Protobuf 등 여러가지 형태로 짜보기. • Ex) 서버 <> 클라이언트 통신해보기. HTTP 기반 API, 웹소켓 등 여러가지 방식 써보기 • Ex) JWT 를 이용한 로그인은 어떻게 하는가 개발해보며 이해, 문제가 왜 생기는지 이해 • 서버 셋팅, 프론트, 백 전부 해보며 웹이 어떻게 연동되는지 전체적인 그림 그리기 99 어떻게 공부하나요?
  • 100. 2. 취약점 종류별로 문제 풀기 • 취약점과 페이로드 짜는 법을 익힌다 • 취약점 종류가 다양함. 범위가 넓음 • 보통 웹해킹 하면 SQLi와 XSS만 다루는 경우가 있는데, 그 외에도 다양한 취약점이 있다! • https://portswigger.net/web-security • 처음에는 유형별 연습문제 풀듯 풀고, 점차 취약점 종류에 대한 정보 없이 풀어보기 • 문제를 풀며 Burpsuite 같은 기본적인 툴에도 익숙해지자 100 어떻게 공부하나요?
  • 101. 3. 리얼월드 케이스 스터디 • 버그헌팅 사례 분석, CVE 분석 • 리얼월드에서 발생한 취약점/익스플로잇을 분석 • https://hackerone.com • CTF나 워게임에서 보는 것보다 단순하고 일반적인 문제가 빈번하게 발생한다. • 대부분이 개발자의 실수로부터 발생 • 리얼월드 해킹하듯 Reconnaisaance(정찰)부터 시작하여 접근하는 방식도 익혀보자 101 어떻게 공부하나요?
  • 102. 4. 최신 웹 기술, 방어기법 우회 방법 공부 • 어려운 워게임이나 리얼월드 케이스 스터디를 통해 우회법 익히기 • NoSQL, 웹소켓, GraphQL, Protobuf 등… • 가장 메이저한 기술 스택(SQL, REST API 등) 외에 여러가지 기술로 범위를 넓혀가자 • 간단한 사이트를 만들어보며 사용법, 특징 익히기 • 이 기술과 관련된 취약점 사례를 찾아보기 • WAF(Web Application Firewall) 우회 방법 익히기 • https://waf-bypass.com/ 102 어떻게 공부하나요?
  • 103. 5. 여러가지 자동화 툴 사용 • 여러가지 자동화 툴, 스캐너, 퍼저를 사용해보자 • 오픈소스를 뒤져가며 내 손에 맞는 툴을 만들자 • 스캐너를 조합하여 자동 스캐너를 만들어보자 • https://github.com/pry0cc/axiom 103 어떻게 공부하나요?
  • 105. 그래서 무슨 직업을 가질 수 있나요? • 사실 한국에선 보안 아는 개발자가 보안 전문가보다 잘 벌지만………… • 그냥 보안 잘 아는 개발자 하면 좋습니다 • 그래도 보안이 너무 좋아요 • 외국어를 공부합시다… 105
  • 106. 그래도 보안이 너무 좋아요 106 그래서 무슨 직업을 가질 수 있나요? • 웹해킹/포너블 • 보안진단/모의해킹/컨설팅 • 블록체인 오딧팅 • 화이트 해커(?) • 리버싱 • 악성코드 분석 • 게임핵 분석 및 대응 (게임회사) • 안티 리버싱 툴 개발 • 경쟁사 리버스엔지니어링 해주세요(?) • 보안 제품 개발 • 보안 솔루션 개발 • 백신 개발 • 자동 보안 진단 프로그램 개발 • OSINT 정보 수집 서비스 개발 (like Shodan) • …굉장히 다양한 보안 제품들… • 포렌식 • 사이버수사대 • 침해사고 대응 (CERT) • 보안 엔지니어 • 보안 시스템을 설계, 구현, 업데이트, 운영 • 대규모 클라우드 설계 • 일반 회사의 보안팀 • ISO27001, ISMS-P 요건 맞추기 • 각종 리소스 보안 관리, 보안 솔루션 도입 등 • 직원 보안 교육 • 자사 제품 취약점 찾기 • 외부 보안 회사에 외주 주기 • 침해사고 대응 등 • ISO27001, ISMS-P 심사원 • 7급 공무원(?) • 야생의 버그 헌터
  • 107. 포트폴리오? 대외활동? • CTF • 팀 짜서 대회 나가기. 취업 시 우대사항으로 본다. • https://ctftime.org/ • 버그헌팅 • 리얼 월드에서 버그 찾기. 수익도 얻을 수 있다! • 취업 시 우대사항으로 본다. 의외로 할만 함 • 워게임 풀이/CVE 분석/버그헌팅 리포트 분석/악성코드 분석 등 정리 • 블로그에 정리하거나 포트폴리오에 사용하자 • 보안 관련 랩 학부연구생 • 보안에 관심있는데, 관련해서 학부연구생 할 수 있는지 메일 보내봅시다! • 학과 공지사항 게시판에 모집 공고 올라오기도 함 107 취업할 때 뭘 써야하죠?
  • 108. 포트폴리오? 대외활동? • 할만한 대외활동 • BoB: https://www.kitribob.kr/ • 화이트햇 스쿨: https://www.kitribob.kr • KITRI에서 새로 운영하는 교육 • BoB 지원 시 가산점 받을 수 있음 • K-Shield JR: https://www.kshieldjr.org/ • 해킹캠프: http://hackingcamp.org/ • 보안 컨퍼런스 PoC에서 주관하는 해킹/보안 캠프 • 그냥 1박 2일 발표 듣고 CTF 하고 친구 사귀는 곳 108 취업할 때 뭘 써야하죠?
  • 109. 어떻게 보안 공부를 하셨나요? • 대학 와서 처음 컴퓨터 공부 시작 • 1~2학년까지는 C, C++ 언어 책을 무한 반복 • 책 읽고 워게임 문제 풀기 • 1~2학년 때 해킹 책을 이해하려고 해봄 -> fail • 3학년쯤 드디어 책이 이해가 되기 시작함 • OS, 컴퓨터 시스템, 네트워크, DB 지식이 생겨서 • 보안 관련 랩 학부 연구생 • 2학년 겨울방학~3학년 겨울방학 • 보안 관련 프로젝트를 하긴 했는데, 레드팀 관련은 아니었음 109 개인적으로… • 3학년 마치고 1년 휴학, 스터디 진행 • 혼자 공부하자니 외롭고 잘 안 되고… 집에 있음 눕고 싶고… 나 에겐 마감이 필요해~ • 에타에서 보안할 사람 2명 모아서 강의식으로 진행 • OS/컴퓨터 시스템+윈도우 리버싱, 리눅스 리버싱, 포너블 순서로 강의 • 학회가 신설됐는데… 지인에게 납치되어 학회에서 스 터디 진행 • 이왕 강의자료를 만들었으니 복습할 겸 한번 더 강의 • +웹해킹 강의 추가…하다가 • BoB 합격하여 휴학하고 BoB로 • 독학인생 끝나고 나의 성공시대 시작될까? (과연?)
  • 110. BoB 지원 시 어떤 점을 어필했나요? • 자기소개서는 스터디 진행한 것을 중심으로 썼음 • 스터디를 진행한 이야기로 빌드업 • 강의 자료는 SlideShare에, 강의 녹화본은 유튜브에 올려놓고 링크 공유 • 문제 풀이나 스터디 기록은 블로그에 올리고 링크 공유 • 학부연구생으로 보안 관련 프로젝트 • 보안 장비에서 생성하는 로그를 수집, 실시간 빅데이터 분석 (Spark streaming) • 면접 때 이쪽을 많이 물어봄 110 개인적으로…
  • 111. 어떻게 버그헌터가 되었나요? • 2학년 때 버그헌팅에 대해 알게 됨 • 프리랜서 버그헌터로 먹고 살겠다는 목표를 세움 • 디지털 노마드로 돌아다니면서 퍼즐 풀어서 밥 벌어먹으면 얼마나 즐거울까? • 졸업 후 한동안 버그헌팅에 매달림 • 당시 웹해킹으로 버그헌팅, 하지만 이것만으로 생활하기엔 작은 성과… 경험과 요령이 부족하다. • 취직하여 자금과 경험을 쌓을 필요가 있겠다 판단 • 취직 • 보안 직무라고 갔지만 개발 일을 더 많이 함 • 스마트 컨트랙트 오딧팅 및 개발, 모의해킹, 백엔드 개발, 프론트 개발… ^^; • 언제까지 뭔가 하고싶은 열정이 남아있을까? • 월급만 바라보면서 재미없는 프로젝트 짜는 거 질린다.. 말도 안 되는 클라이언트 싫다.. • 퇴근하면 기력이 없어서 아무것도 못하겠는데… 이러고 평생 살아야 하나? 이제는 다시 도전할 때이다!!! • 일단 3개월 해보고 각 안 나오면 취업한다 라는 기준을 세운 후 도전… • 버그헌팅만으로 생활? 이제 가능한 듯? 😎 111 개인적으로…
  • 112. 결론 • 해킹/보안이란 기본적으로 남의 프로그램/공격을 분석하는 일 • 개발/공격을 할 줄 알아야 남의 것을 분석할 수 있다. 원리를 이해해야 분석이 가능 • 끈기가 필요한 일이다 • 거대한 코드베이스에서 단 한 라인으로 인한 오류를 찾아내기 • 난독화 된 코드/페이로드 해석하기 • 실력이 붙기까지 꽤 많은 시간이 필요함 • 문제가 안 풀려도 책이 이해가 안 되어도 조급해 하지 말고 멀리 보고 차근차근 쌓아가자 • 많이 짜고, 읽고, 직접 실험해보기를 무한 반복 112
  • 113. 결론 • 기본적으로 분야 별 공부 방법은 비슷함 (교과서 위주로 공부했어요?) • 개발/배경지식 익히기 • 취약점 원인에 따른 분류 및 공격 방법 익히기 • 방어 기법과 우회 방법 익히기 • 리얼월드 케이스 스터디 • 다양한 최신 분석 기법/툴 사용법 익히기 • 특화 분야 정해서 자리잡기 113
  • 114. 결론 • 배경지식이 많이 필요한 일 • 아는 만큼 보인다. 더 깊이 이해할 수록 남들이 보지 못하는 더 많은 게 보일 것 • 학교 수업에 충실하게 임하는 것도 중요! • 교수님이 맘에 안 들어도 드랍하지 말고, 혼자서라도 교재를 열심히 읽자 114
  • 115. 115 수학은 타겟 로직 이해 시 필요 탄탄히 해 둘수록 좋다! (특히 블록체인 DeFi나 금융 쪽) 타겟 소스코드를 이해하려면 기본 개발 지식은 필수 웹해킹 시 DB를 잘 알아야 한다. (DB를 털어야 하니까) 로우레벨은 리버싱/포너블의 기초 배경지식 정보보안은 들어야죠 암호학, 보안 기초 네트워크는 분야 불문 필수 배경지식 백엔드 개발..? 웹해킹 배경지식 (없던 수업이라..) <해킹 관점에서 수업의 쓸모> 이 수업을 꼭 들으라는 건 아니고... 이런 쓸모가 있을테니 열심히 하자는 의미.. 이외의 수업들도 일단 알아두면 도메인 지식이 되어 특정 분야 테크를 타거나, 다양한 타겟을 빠르게 이해하는 데 도움이 됩니다~
  • 117. 사전 질문 • 혹시 SuNiNaTaS 하셨다면, 가장 기억에 남는 문제나 어려웠던 문제, 도움 이 되었던 문제 등 이야기 나눠 주시면 감사하겠습니다! • SuNiNaTaS는 안 풀어봤습니다… • 가장 기억에 남는 문제는 pwnable.kr 의 unexploitable 문제입니다. • BoB 과제로 나왔는데, 센터에서 밤새면서 SROP를 처음 이해한 순간 굉장히 기뻐한 기억 117 Q&A
  • 118. 사전 질문 • 안녕하세요? 정보보안 분야로 진출을 희망하는 2학년 학생입니다. 이쪽 분 야도 알고리즘 ps를 틈틈이 하는 것이 도움이 되는지 궁금합니다 ㅎㅎ 감 사합니다! • 공격 자체에는 직접적으로 PS가 필요하진 않는 것 같습니다. • 그치만 문제를 풀며 훈련되는 사고방식이 영향을 주긴 하는 것 같아요 • 툴을 만들 때는 ‘아 이거 뭔가 PS 문제로 있을 것 같은데… 쉽게 짤 방법이 있을 것 같 은데…’ 같은 생각이 들 때가 있습니다. 그래서 약간 아쉬울 때가 있어요. 118 Q&A
  • 119. 사전 질문 • 탑 쌓듯이 기초 컴퓨터 지식을 공부하고 해킹 공부를 하는 게 맞는지, 우선 해킹 공부를 시작하면서 모르는 게 나올 때마다 찾아보면서 하는 게 맞는지 궁금합니 다. • 베이스가 전혀 없다면 (컴퓨터를 처음 공부) 베이스를 쌓는 쪽이 효율적 • 모르는 게 나올 때마다 검색하는 상황이 너무 많으면 컨텍스트 스위칭이 일어나겠죠? • 한 3학년 수준의 베이스를 쌓으면 찾아보면서 할만한 것 같습니다! • 그 전까지는 복습 & 학교 커리큘럼 예습 하는 게 효율적일듯 • 그래도 재밌는 걸 뒤로 미루면서 배경지식만 쌓는 건 지루하니까… • 일단 해보면서 너무 모르는 게 많다 싶으면 부족한 쪽의 지식을 쌓는 시간을 가집시다 • 잘 모르겠어도 읽었을 때 재밌으면 그냥 읽어보는 것도 좋아요.. 2번째 읽을 때는 더 잘 이해되 니까 119 Q&A
  • 120. 사전 질문 • BoB 지원 시 기존 BoB 수료자나 보안업계에 현업으로 일하고 있는 사람의 추천 서가 선발에 중요하다고 들었는데 그러한 인맥을 만들기 위해서는 어떠한 활동 을 하는 게 좋을까요? • 추천서가 선발에 중요? -> 알 수 없음 • 추천서 없이 뽑힌 사람도 많고, BoB 가면 다들 자기가 왜 뽑혔는지 모름 • 당시 결론은 솔직히 뽑는 기준을 모르겠다 였습니다... • 원래 잘 하던 사람도 뽑지만… 열정을 보는 느낌도 좀 있었습니다. • 저는 일단 필요한 건 다 써봐야지 해서 학부연구생 했던 교수님께 부탁드렸습니다. • 교수님과 친하게 지냅시다 • 등록금 뽕 뽑아야…(?) 120 Q&A
  • 121. 사전 질문 • 프리랜서와 정직원을 비교하면 어떤가요? • 원래 저녁형 인간이라 맘대로 일어날 수 있어서 좋습니다 • 회의도 없고 휴가도 내 맘대로~ 컨퍼런스 놀러가서 디지털 노마드~ • 정말 하기 싫은 일은 안 함. 재미없는 타겟은 버립니다. • 그치만 강제성이 없기 때문에 시간 관리가 어려움 • 저는 주중 하루 6시간은 무조건 일하기로 루틴을 만들고 어떻게든 지키고 있습니다. • 따박따박 나오는 월급이 주는 정신적 안정감이 없음 • 평범한 자영업자(…) 121 Q&A
  • 122. 사전 질문 • 보안 분야가 다른 it관련 직군들과 비교했을 때 장점이거나 차별화되는 점 이 무엇이라고 생각하시나요? • 취향에 맞으면 이보다 재밌는 게 없다 • 영원히 퍼즐을 풀 수 있다! 퍼즐을 풀면 돈을 준다! • 바운티 한다면 랭킹 올리는 재미... 게임하는 것 같음 • 남의 코드 지적하기 너무 즐겁다! • 자극적이고 흥미로운 사건 사고 • OO 서비스에 몇십억짜리 사고가 터졌다고~ 당장 구경해 당장 분석해 • 물론… 분야 by 분야… 122 Q&A
  • 123. 사전 질문 • 블록체인 개발자가 되는 과정과 평균 급여 및 개발 환경이 궁금합니다 • 급여는 역시 기업 by 기업.. 그래도 최소 4~5천은 주는 곳으로 갑시다 • 블록체인 기업 이상한 데 가면 개발자 1명 뿐인 곳에서 요상한 스캠 프로젝트 해요 조심!!! • 기술자가 얼마나 있는지 꼭 확인하시고.. 동일 직무 기술자는 몇 명인지… • 개발환경 국룰? • Solidity(또는 Rust), Foundry 또는 Hardhat (스마트 컨트랙트) • Nextjs, React, Vercel (프론트) • Subgraph ((탈중앙) 백엔드) • 중앙 서버 필요시 백엔드 서버 (회사 기술 스택에 따라) • 블록체인 코어라면 Go/Rust 123 Q&A
  • 124. 사전 질문 • 해커가 되려면 개발자가 배우는 기본 프로그래밍 언어에 대해 잘 알고 있어야 하나요? 그 외에 어떤 것들을 공부해야 하는지 알고 싶습니다! • 프로그래밍 언어에 익숙해서, 모르는 언어가 나와도 대충 논지는 파악할 수 있는 수준 정도 필요 • 타겟이 오픈소스이거나, 사용할 툴 리서치를 할 때 등… 바이너리 뿐만 아니라 소스코드도 꽤 많이 읽기 때문 • 처음 보는 언어/프레임워크를 이용해 잘 만들지는 못 해도 기능이 돌아는 가게 만들 수 있는 수준이면 적절 • 전문 개발자만큼 특정 언어/프레임워크에 정통할 필요는 없음 • 다만 특정 환경/프레임워크에 특화된 해커가 되려면 정통해야 합니다 • Ex) Unity로 만든 게임 해킹에 특화된다면 Unity를 잘 알아야 한다. • Ex) 커널 해킹을 할 거면 커널 소스코드(C언어)를 읽어야 한다. • 그 외 공부할 것들은 발표에서 얘기한 듯! 124 Q&A
  • 125. 사전 질문 • 보안 공부를 하기전에 선행되어야하는 공부가 무엇이 있을까요? • 개발 공부 • 기본적인(개발을 하든 해킹을 하든 뭘 하든 공유하는) 컴퓨터 공학 지식 • 자료구조 • 알고리즘 • 네트워크 • 컴퓨터 구조 • OS • DB 125 Q&A
  • 127. 부록 분야별 입문 커리큘럼 괜찮은 책/사이트 리스트 127
  • 130. 리버싱 커리큘럼 https://www.slideshare.net/JinkyoungKim8/presentations + Linux ELF 리버싱 (CTF에서는 주로 ELF가 나옴… 하지만 입문하기엔 윈도우가 자료가 많음) + Frida 사용법 익히기 (https://frida.re/docs/home/ ) + 동적 분석 (악성코드 분석 관련 책 읽기) + 분석하길 원하는 플랫폼으로 특화(윈도우/리눅스/ARM/안드로이드/iOS/…) 130
  • 131. 포너블 커리큘럼 https://www.slideshare.net/JinkyoungKim8/presentations + Heap overflow: https://github.com/shellphish/how2heap 하나씩 풀며 공부 + Fuzzing, Taint analysis, Symbolic execution 등 키워드 리서치 하며 공부 131
  • 132. 웹해킹 커리큘럼 • 1. 웹 개발 기본 지식 익히기 • 네트워크 기본 지식 – HTTP, TCP/IP • 웹 개발해보기 • 프론트, 백 가리지 말고 짜보자 • 취약점 공부할 때도 일부러 취약한 사이트를 만들고 공격해보는 방식 으로 연습해보면 이해하기 좋다 • 2. 취약점 종류별로 익히기 • 클라이언트사이드 • XSS • Prototype pollution • CSRF • Open redirect • Clickjacking • … • 서버사이드 • SQLi • IDOR • SSRF • SSTI • XXE injection • Logic error • 인증 관련 취약점 • OS command injection • Web cache poisoning • HTTP request smuggling • Race condition • NoSQLi • GraphQL 취약점 • … • 방어기법 우회하기 • 페이로드 난독화하여 필터링 우회 • 3. 리얼 월드 스타일로 연습하기 • 블랙박스, Recon 부터 시작하는 웹해킹 • 버그헌팅 보고서 읽고 정리 • 리얼월드 취약점 종류를 분류해보며 자료를 쌓아가자 • 블로그든 노션이든 자신만의 데이터를 정리하자! • 퍼저, 각종 오픈소스 툴을 모아 나만의 툴을 만들자 132
  • 133. 리버싱 추천 책 • 리버싱 핵심 원리(2012) • 입문~고급(안티리버싱)까지 꼼꼼하게 다룬다. Windows 기반. 오래된 게 아쉬움 • 리버스 엔지니어링: 파일 구조 편 (2016) • Windows PE 파일 구조에 대해 아주 자세하게 다룬다. • 리버스 엔지니어링: 디버거 편 (2017) • 리눅스 바이너리 분석 (2016) • Linux ELF 파일 분석 • 실전 악성코드와 멀웨어 분석 (2013) • 악성코드 분석 시작하기 (2020) 133
  • 134. 포너블 추천 책 • 해킹 : 공격의 예술 (2010) • 실습용 CD가 있던 것 같은데 잘 안돌아갔던 것 같다.. 읽어볼만 함 • 윈도우 시스템 해킹 가이드 버그헌팅과 익스플로잇 (2019) • 흔치 않은 윈도우 포너블 책. 윈도우에만 제한된 게 아니라 기본적인 방어기법과 우 회 방법에 대한 설명도 우수 134
  • 135. 웹해킹 추천 책 • 웹 해킹 & 보안 완벽 가이드 (2014) • 웹 해킹 전체적인 그림을 그리는 데 좋음. 다만 좀 오래됨 • 웹 애플리케이션 보안 (2021) • HTTP 완벽 가이드 (2014) • Bug Bounty Playbook Parts 1& 2 • 정찰(Recon)부터 취약점 찾기까지 깔끔하게 정리했음. (원서) • https://ghostlulz.com/ 135
  • 136. 리버싱 관련 사이트 • https://tuts4you.com/ • 외국 리버싱 커뮤니티 • 문제 뿐만 아니라 리버싱과 관련된 여러 자료들을 얻을 수 있음 • https://codeengn.com/ • 한국 리버싱 커뮤니티. 매년 컨퍼런스 주최 • 문제 뿐만 아니라 리버싱과 관련된 여러 자료들을 얻을 수 있음 • Windows 중심으로 있음 • https://dreamhack.io/lecture/roadmaps/all/reverse-engineering • 티오리에서 운영하는 리버싱 강의/문제 • http://reversing.kr/ • 리버싱 문제 136
  • 137. 포너블 관련 사이트 • http://pwnable.kr/ https://pwnable.tw https://pwnable.xyz/ https://overthewire.org https://www.hackerschool.org/HS_Boards/zboard.php?id=HS_Notice&no=1170881885 • 포너블 워게임 모음 • https://github.com/shellphish/how2heap • 힙 관련 문제 모음. 하나씩 풀면서 힙 취약점 공부하면 됨 • https://dreamhack.io/lecture/roadmaps/all/system-hacking • 티오리에서 운영하는 포너블 강의/문제 • https://github.com/cpuu/awesome-fuzzing • 퍼징 관련 링크 모음 137
  • 138. 웹해킹 관련 사이트 • https://github.com/qazbnm456/awesome-web-security • 웹 보안 관련 링크 모음 • https://portswigger.net/web-security • 분류와 개념 설명이 가장 잘 되어있는 웹 해킹 문제 사이트. • https://www.hackerone.com/ • 버그바운티 플랫폼. 제출된 보고서가 공개되곤 함. • 리얼월드 공부할 때 이곳에 공개되는 보고서를 읽는다. 다른 종류도 있긴 하지만 대부분이 웹 취약점 • https://dreamhack.io/lecture/roadmaps/all/web-hacking • 티오리에서 운영하는 웹해킹 강의/문제 • https://webhacking.kr • 여러 종류의 웹해킹 문제 모음 • https://los.rubiya.kr • SQLi 문제 모음 • https://portswigger.net/web-security/cross-site-scripting/cheat-sheet • XSS 페이로드 아주 정리 잘 되어있음 • https://github.com/OWASP/wstg • OWASP WSTG (OWASP Web Security Testing Guide): 웹 보안 테스트를 할 때 참고할만한 가이드. 여러가지 취약점을 분류해 두었으니 테스트할 때 참고 138
  • 139. 기타 관련 사이트 • https://hackerschool.org/Sub_Html/HS_Posting/?uid=46 • 임베디드(하드웨어) 해킹 자료 모음 (BoB 멘토 작성) • https://ctftime.org/ • 전세계 CTF 리스트 및 일정표 • https://cryptohack.org/ • 암호학 공부 사이트 • https://cryptozombies.io/ • 블록체인 개발 공부 사이트 • https://youtu.be/umepbfKp5rI • 블록체인 개발 공부 유튜브 (Patrick Collins) • https://nodeguardians.io/ https://ethernaut.openzeppelin.com/ https://www.damnvulnerabledefi.xyz/ https://www.codehawks.com/ • 블록체인 워게임/CTF 사이트 139