본문 바로가기

Let's Study/Basic System Hacking Technique

1. 시스템 해킹이란? (linux 기초명령어 & vim 명령어 사용법)

 

system_hacking1.pdf
다운로드

 

 

 

 안녕하세요. Shayete입니다. 

 

 시스템해킹 공부를 하고 싶은데 어떻게 시작해야할지, 어느 책을 보고 공부해야할지 잘 모르시는 분들을 위해 포스팅을 시작했습니다.

 

시스템해킹은 리버싱과 다르게 특별하게 정리가 잘 된 서적(예를 들어 리버싱 핵심원리 랄지, 리버싱엔지니어링 비밀을 파헤치다 등)이 없기 때문에 공부할 때 불편함을 겪는 분들이 많으실 거라 봅니다. 저도 해킹 공부를 하면서 책을 본 기억이 없습니다.

 

결론은 인터넷에서 그때그때 자료를 찾아보면서 공부하는 방법밖에 없는데, 막연하게 인터넷에서 어떤 것부터 검색해야할지 모르는 분들이 많으실거라 생각합니다. 그런 분들을 위해 Basic System Hacking Technique 카테고리를 만들어 포스팅을 시작했습니다.

 

제가 지금부터 포스팅하는 공부환경은 Ubuntu 14.04 32bit OS이고 되도록이면 업데이트를 진행하지 않아주셨으면 좋겠습니다.

해킹원리는 어느 OS든 같기 때문에 접근하기 쉬운 32bit에서 공부를 시작하도록 합니다.

* OS에 따라 적용된 메모리 보호 기법이라거나 메모리 구조가 다를 뿐입니다.

 

 

 

 시스템 해킹이 뭘까요? 시스템해킹이 뭐라고 정확히 정의드리기는 어려우나, 보통 운영체제라거나 소프트웨어, 더 나아가 하드웨어까지 침투해서 메모리를 원하는 대로 조작할 수 있는 기법들을 의미합니다. 대체로 소프트웨어를 공격하는 것을 의미하죠. 

 

 해킹이라고 하면 흔히들 알고 있는 버퍼오버플로우를 예로 들 수 있습니다. 개발자가 만든 input 함수의 취약한 부분을 이용해 값을 허용범위 이상 넣어 메모리 조작을 할 수 있어요. 메모리조작을 원하는 대로 할 수 있다면 해커가 악의적으로 특정 소프트웨어나 운영체제를 공격할 수 있습니다.

 

 해킹의 목적은 여러가지가 있겠지만 게임을 예로 든다면 특정권한이 걸린 템들, 일반 유저들은 가질 수 없는 운영자들이 들고다니는 템들을 메모리조작을 통해 해커들도 가질 수 있어요.

 

 

 

 

은행을 예로 들어볼까요. 도둑(Hacker)은 은행의 특정한 곳에 숨겨진 금고(특정권한이 존재하는 취약한 바이너리)를 찾아 금고를 열어야 하는데 (eip control) 금고에 맞는 방법을 선택해야 합니다.(다양한 공격기법들) 은행 안에 있는 경찰들 눈을 피해 (해커를 감지하는 anti exploit 툴이라거나 특정 메모리 보호기법) 침입할 곳을 파악해두고 경비가 삼엄하지 않을 때를 틈타 금고까지 가서 문을 열고 도둑들이 원하는 금과 보석들을 얻게 되죠.(해커들이 원하는 결과)

 

 

 

 

 이런 해킹을 하기 위한 해킹 기법은 Buffer Overflow, Format String Bug,.. Type Confusion 등 다양한 기법이 존재합니다.

 

 제가 포스팅할 내용은 Stack Corruption, Handray, RTL, RTL Chain, Format String Bug, Integer Overflow, Return Oriented Programming (ROP), 등 시스템해킹에서 알아야 할 기본적인 기법들을 소개하고 실습해보는 시간도 가져보도록 합니다.

 

 

# 알고 가면 재밌는 지

 이번 포스팅은 기본적인 내용들이 많기 때문에 혹시 (지루하실까봐) 리눅스를 한번이라도 접해보신 분들이라면 아실법한 /bin/sh 와 /bin/bash의 bash drop privileges에 대해 잠깐 설명드리고자 합니다.

해킹 공부해보신 분들 중에, 왜 우분투에서는 setuid bit가 걸린 바이너리에서 system("/bin/sh")만 쓰면 특정 권한을 얻을 수 있는데 system("/bin/bash")를 했을 때 특정 권한을 얻을 수 없는지 궁금했던 적 없으신가요.

 

 

 이상하게 /bin/bash를 이용할 때는 setreuid(0, 0)를 걸어줘야 루트권한을 얻을 수 있는데요, 

이건 debian계열 bash 의 특정버전 이상부터 bash drop privilege 정책이 걸려있어서 bash를 이용할 때는 setuid 권한이 임시적으로 제거됩니다.

debian 계열의 특이한 특징덕분에 POSIX모드를 준수하는 /bin/sh나 dash쉘 같은 POSIX쉘은 drop privilege가 적용되어 있지 않아 setuid bit가 걸린 바이너리에서 특정 권한을 얻을 수 있지만 bash쉘은 drop privilege가 적용되어 있습니다. 그래서 보통 우분투를 이용할 때는 /bin/sh를 쓰는 거고요

레드햇 계열에서는 레드햇 7.0 이후로  System() 함수 및 bash가 실행될 때에 setuid 권한이 임시적으로 제거되도록 보안패치가 되어서(drop privilege) 레드햇계열의 리눅스에서는 system("/bin/sh") 나 system("/bin/bash") 둘 다 setreuid()를 사용해야 권한변경이 가능합니다.

 

 

 

우선, 첫번째 포스팅에서는 리눅스 시스템해킹을 공부하기 위해 기본적인 리눅스 터미널 명령어와 vim 명령어 사용법을 알아보도록 합니다.

 

 

1. Linux Terminal Basic Command

 

제가 자주 사용하는 기본 명령어들입니다. 반드시 알아야 할 명령어들이기도 합니다. 리눅스를 사용하기 위해 반드시 알아야 합니다.

 

 

 

 

 

2. Vim Editor Command


 

 

Vim 에디터 사용할 때에 기본적으로 알아야 할 명령어들입니다. Vim은 텍스트 편집 에디터로, 리눅스에서 코딩할 때 유용하게 쓰이는 텍스트편집 툴입니다.

보통 우분투 14.04를 설치하면 vi만 있을텐데 sudo apt-get install vim 으로 vim을 설치한 뒤 사용하도록 합니다.