정보보호영재원_중등기초

2021-06-09 사이버 보안 특강

상세 2021. 6. 9. 20:38

소프트웨어 보안의 현재와 미래

 

강의는 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 : 리버싱은 학문이 아니다. 리버싱을 잘하려면 컴퓨터 구조와 시스템 프로그래밍을 할 줄 알아야 한다.

즉 종합적인 공부를 해야 한다.

많은 스택의 공부들을 해서 공부하는것이 리버싱이라는 하나의 토픽으로 공부하는것보다 낫다.

 

----------------------------------------

오늘 수업도 정말 유익했다. 난이도가 조금 있긴 했다만 그만큼 유익했던것 같다.

또한 내가 가장 관심이 많은 바이너리 분석 분야에 대해 수업을 들을수 있어서 더 좋은것 같다. 

이때까지는 '일단 리버싱 핵심 원리로 공부해야지' 라고 생각했었는데 다시 생각해 볼수 있는 좋은 기회였던 것 같다.

그럼 일단은 이번 방학에는 이론 공부와 실전 리버싱을 병행해야겠다.