리버싱(Reversing)
리버싱(Reversing)은 리버스 엔지니어링(Reverse Engineering)이라고 한다.
소프트웨어 공학의 한 분야로, 이미 만들어진 시스템을 역으로 추적하여 처음의 문서나 설계기법 등의 자료를 얻어 내는 일을 말한다. 이것은 시스템을 이해하여 적절히 변경하는 소프트웨어 유지보수 과정의 일부이다.
[네이버 지식백과]
예를들어 exe파일이 생성되는 과정을 한번 보면, 제일 먼저 프로그래머가
1. 소스코드를 작성
2. 컴파일(Compile)
3. 링킹(Linking)
4. exe파일 생성
이러한 순서로 진행 되게 된다.
앞서 사전적 의미와 같이 이렇게 만들어진 exe파일을 거꾸로 분석하면서 기계어와 1:1대응되는 어셈블리어, 좀 더 깊게는 원시코드를 알아내는 것이 리버스 엔지니어링(리버싱)이라고 한다.
그러면 리버싱이 왜 필요할까?
2014년 3월 20일에 발생한 사이버 테러사건이 있다. 바로 320 사이버 테러사건이다.
대부분 알겠지만, 이번 320테러 사건으로 인해서 금융, 방송국등.. 해당되는 PC가 공격당했다.
공격종류는 디스크의 MBR영역과 DATA영역을 모두 날려버리는 것이였다.
MBR영역만 날려버리면 포렌식가가 금방 복구할 수 있지만, DATA영역까지 날려버려 당황하게 한 사건이다.
그렇다면, 이러한 사이버 테러가 발생하면 어떻게 대처해야 되는 것일까?
자 과거로 돌아가보자고 하자.
가정하에 당신은 포렌식을 할 수 있는 능력자다.
당신의 컴퓨터가 320테러때 사용한 똑같은 악성코드로 하드가 날라갔다.
그리고, 당신은 320테러 악성코드 파일이 손안에 있다.
이 악성코드가 어떠한 일을 수행하고 어떠한 방법으로 공격을 하는지 당신을 아직 모른다.
자, 이러한 상황이라면 당신은 어떻할까.
바로 하드 복구를 진행 하겠습니까?
결론부터 말하자면, 안됩니다. 현재 악성코드가 어떤 부분들을 공격하고, 또 어떤 루트로 점염되고 퍼저나가는지, 다음 공격이 또 있는건지, 전혀 모르는 상태에서 바로 하드복구를 진행했다간.... 제 2의 테러를 맡이할 수도 있습니다.
그래서 여기서 바로 리버싱이 필요한겁니다.
악성코드를 먼저 분석을 해서 이 악성코드가 어떤 코드들로 이루어져 있는지,
어떻게 어떠한 방법으로 공격을 하였는지 완벽하게 파악을 한 후, 어떻게 복구를 진행 할 것인지, 다음 공격이 있다면, 어떻게 방어를 할 것인지를 계획해야 합니다.
그래서 리버싱에는 크게 3가지가 있습니다.
1. 코드분석 (원시코드 알아내기)
2. 취약점 분석
3. 악성코드 분석
리버싱을 이용하여 적용할 수 있는 분야는 무궁무진합니다. 만들어진 프로그램을 분석하여 원시코드를 예측하여 해당 프로그램이 어떻게 구성되어있고, 어떻게 진행되어 가는지를 미리 파악할 수 있기 때문에, 리버싱은 색다른 매력을 주는 분야입니다.