소프트웨어 보안의 현재와 미래
강의는 KAIST 사이버보안연구센터장이신 차상길 교수님께서 강의를 진행해주셨다.
1. CTF
1) CTF에서 바이너리 문제를 자주 내는 이유
* 소프트웨어 보안이라는 학문 자체가 바이너리 분석으로부터
시작되었기 때문이다.
* 소프트웨어 보안을 논하기 위해서는 바이너리 분석이 필수
2) 100% 소스코드가 주어져도 보안 취약점을 진단할 수 없다.
* Ken Thompson이 주장하였다. -> 소프트웨어 보안 학문의 태동 시기
2. 소프트웨어 보안
1) 소프트웨어 보안의 시작
* 바이너리 분석과 함께 시작
* 소프트웨어에 대한 불신에서 출발
2) 신뢰 경계
* 소프트웨어와 하드웨어에는 명시적인 신뢰관계 존재
-> 이 속에서 소프트웨어를 믿을수 없으므로 소프트웨어의 취약성을 분석하기 위해
소프트웨어와 하드웨어의 신뢰관계 사이에서 있는 바이너리를 분석함으로써 가능하다.
3) Quine
* 자신의 소스코드를 그대로 출력
4) C 컴파일러를 C언어로 만들기
*
5) 트로이 목마
* 일반적인 컴파일러 소스코드에 추가로직을 추가해서 소스 자체를 변형시켜 컴파일하게함. (1)
3,4의 이론을 통해 스스로 자가 복제가 가능한 백도어 생성 가능 -> 소스코드만 봐서는 악성 코드 여부 판단 불가
내가 지금 보는 소스코드가 실제 실행되는 바이너리와 다를 수 있다.
-> 소프트웨어 보안의 핵심 시작점 , 바이너리 분석 필수
6) 바이너리 분석의 문제점
* 대부분의 해커들은 수동 분석에 의존
* 바이너리 분석은 어려움
3. 바이너리 분석 과정
1) 컴파일
* 아이디어 -> 소스코드 -> 중간언어 -> 어셈블리어 -> 바이너리 코드 (기계어)
1) 역어셈블 : Undecidable 문제 -> 컴퓨터가 풀수 없는 문제
* 바이너리 코드를 순차적으로 역어셈블 (1단계) 쉽다
* 코드영역이 아닌 데이터 영역은 제외하고 넘어감. 어렵다
** 명령어의 의미 종류 파악
** 분기문을 만나면 분기문의 점프 대상 주소 찾기
** 해당 주소에 있는 명령어에서부터 다시 순차적으로 역어셈블을 수행
2) 중간언어 변환
* 어셈블리 언어에 나타나지 않는 실제 코드상의 의미를 명확히 표현
* 중간언어 만들기도 어렵다.
3) CFG 복원
* IDA pro나 기드로는 잘 찾아내지 못하며 틀리기도 한다.
4. 뛰어난 해커가 되고싶다면
컴퓨터 과학의 기초와 원칙을 깊이 있게 공부할 것
-> 기초(프로그래밍, 컴파일러 이론, 컴퓨터 구조 이론)를 깊이있게 이해하지 않고서는
훌륭한 해커가 될 수 없다.
해킹 문제풀이에만 무조건적인몰두 X
바이너리 분석을 공부하려면 탑다운 방식으로 공부하는것이 나은가? 바텀업이 나은가?
A : 이론 공부를 하면서 실전도 연습하라.
"리버싱 핵심 원리" "리버스 엔지니어링 바이블" 등 이런 서적을 어떻게 활용해서 공부해야할까요?
A : 리버싱은 학문이 아니다. 리버싱을 잘하려면 컴퓨터 구조와 시스템 프로그래밍을 할 줄 알아야 한다.
즉 종합적인 공부를 해야 한다.
많은 스택의 공부들을 해서 공부하는것이 리버싱이라는 하나의 토픽으로 공부하는것보다 낫다.
----------------------------------------
오늘 수업도 정말 유익했다. 난이도가 조금 있긴 했다만 그만큼 유익했던것 같다.
또한 내가 가장 관심이 많은 바이너리 분석 분야에 대해 수업을 들을수 있어서 더 좋은것 같다.
이때까지는 '일단 리버싱 핵심 원리로 공부해야지' 라고 생각했었는데 다시 생각해 볼수 있는 좋은 기회였던 것 같다.
그럼 일단은 이번 방학에는 이론 공부와 실전 리버싱을 병행해야겠다.
'정보보호영재원_중등기초' 카테고리의 다른 글
2021 06 12 일방향함수&대칭키와비대칭키 (3) (0) | 2021.06.12 |
---|---|
정보보호영재원_중등기초2021 06 12 일방향함수&대칭키와비대칭키 (2) (0) | 2021.06.12 |
2021 06 12 일방향함수&대칭키와비대칭키 (1) (0) | 2021.06.12 |
2021_04_10 윤리교육 (0) | 2021.05.15 |
프롤로그 (0) | 2021.05.15 |