By rls1004 | October 1, 2016
Hacking in Die Hard 4.0 (1)
< 다이하드 4.0 > 속 해킹을 알아보자 :)
“이거 불법 아닌 거 맞나요?”
“그냥 보안 시스템 체크 작업이니 괜찮습니다.”
<다이하드 4.0> 에 등장하는 해커 ‘매튜 패럴’이 테러 집단에 속해있는 여자 요원에게 속아 해킹 데이터를 넘겨주면서 나눈 대화입니다.
해킹을 공부하고 싶다면 제일 먼저 배워야 하는 것이 해커 윤리입니다.
기본적인 얘기부터 시작 해 볼까요?
‘해커’ 는 무엇일까요?
# 네이버 어학사전 검색 결과 : hack
네이버 어학사전에서 정의하고 있는 hack 의 뜻입니다.
hack은 1950년대 말 미국 매사추세츠공과대학(MIT)의 동아리 모임에서 유래되었는데요, “작업과정 그 자체에서 느껴지는 순수한 즐거움 이외에는 어떠한 건설적인 목표도 갖지 않는 프로젝트나 그에 따른 결과물” 이라는 뜻입니다.
여기에 사람이라는 의미로 접미어 ‘-er’ 을 붙였습니다.
해커는 정말 멋있는 뜻이죠? :D
아래는 “윤리적 해커를 위한 윤리선언(Hacker’s code of Ethics)”의 내용입니다. 한 번씩 들어 보셨을 겁니다.
[윤리적 해커를 위한 윤리선언(Hacker’s code of Ethics)]
1. 윤리적 해커(Ethical Hacker), 화이트 해커(White Hat)임을 명심하라.
- 해커(Hacker)는 크래커(Cracker)와 다름을 명심하라.
2. 허용된 범위 내에서 행동하라.
3. 피해를 주지 말라.
- 어떠한 경우에라도 어떤 것(데이터를 포함한 시스템)에도, 그 누구에게도 피해를 주지 말라.
- 취약점을 통해 노출된 어떤 데이터도 다른 저장 매체나 경로로 복사하거나 전파하지 말라.
- 대상 시스템의 비즈니스를 저해하지 않도록 유휴 시간(Idle Time) 동안만 해킹을 수행하라.
4. 개인 정보를 보호하라.
- 개인 정보를 보호할 의무와 책임을 잊지 말라.
- 취약점을 통해 노출된 어떤 개인 정보도 어떤 경로로든 외부로 유출하지 말라.
5. 과도함을 경계하고 스스로를 절제하라.
- 과도한 시스템의 해킹은 예상할 수 없는 피해를 야기하고, Cracking이 될 수 있음을 유념하고, 스스로를 경계하라.
6. 항상 커뮤니케이션하고 보고하라.
- 커뮤니케이션과 보고는 권리이자 의무 사항이다.
현재 자신이 하고 있는 행동과 범위, 발견된 사항에 대해서 커뮤니케이션을 수행하고, 문서화와 보고를 의무적으로 해야 한다.7. 가능하다면 자신의 흔적을 남기지 말라.
- 불필요한 관심이 집중되지 않도록 가능하다면 자신의 흔적을 남기지 말라.
8. 공유하라.
9. 스스로를 방어하라.
- 자신의 공격 경로를 통해 다른 해커에 의해 악용되지 않도록 스스로를 방어하라.
10. 해킹이 보안에 도움 되도록 하라.
- 발견된 취약점에 대한 대응까지도 고민하고, 제시하라.>
윤리의식은 후각과 같아서 오염된 향에 취해 조금만 시간이 지나도 감각이 마비되는 경향이 있습니다.
누군가 “해커는 교도소 담장 위를 걷고 있다”라는 표현을 사용한 적이 있습니다.
담장의 오른쪽으로 떨어지면 교도소 안이고 왼쪽은 그 밖입니다.
적절한 표현인지는 모르겠지만 무슨 의미인지 이해 하셨을 거라고 생각합니다. ^_^..
실제로 보안 공부를 하다 보면 불법인지 아닌지 모를 수상한 제안들을 받기도 하는데
해커의 의미를 생각해보며 잘 구분해 내시길 바랍니다.
본격적으로 영화를 감상해볼까요?
“이봐, 방금 5만불 벌었어.”
( Delete 키를 누른다 )
(펑)
어떤 청년 해커가 친구에게 5만불을 벌었다며 자랑합니다.
그 후 컴퓨터가 이상하다며 ‘Delete’키를 누르는데요, 곧 바로 폭발이 일어납니다.
보안 작업이라고 속아 테러집단의 일을 도와준 해커는 이렇게 제거됩니다. T_T
‘Delete’키를 눌렀을 뿐인데 폭발이 일어나다니.. 가능한 일일까요???
여기서 후킹Hooking 기법이 사용된 것 같습니다.
후킹은 정보를 가로채고, 실행 흐름을 변경하고, 원래와는 다른 기능을 제공하게 하는 기술입니다.
그냥 넘어갈 수 없죠! 후킹에 대해 간단하게 알아볼까요?
# 윤후킹!
후킹이란 뭘까요?
# 위키백과 검색 결과 : 후킹
위키백과를 찾아보면 위와 같은 설명이 나옵니다. 요약하자면 컴퓨터의 입력 정보를 빼돌리는 기법이에요.
갈고리나 낚시 바늘을 후크라고 하죠? 마치 후크처럼 다른 사람의 메모리나 입력 정보를 낚아챌 수 있답니다.
여러 종류의 후킹이 있는데 그 중에서도 키보드의 입력 정보를 가로채는 ‘키보드 후킹’을 좀 더 알아볼게요!
# 정상적인 키보드 입력
# 누군가 훔쳐본다
메모장에 값을 입력한다고 했을 때, 키보드에서 어떤 값을 입력하면 그 값이 메모장에 전달됩니다.
그런데 여기서 악의적인 사용자가 나타나서 메모장에 전달되기 전에 키보드의 입력 값을 봤어요, 그리고 메모장에 전달됩니다.
사용자는 자기가 입력한 값이 정상적으로 들어가니까 누군가 그 값을 훔쳐봤다고 예상하기 어렵겠죠?
# 키보드 이벤트 변조
훔쳐보는 것뿐만 아니라 값을 바꿀 수도 있습니다.
‘K’라는 키가 눌려 이벤트가 발생했을 때, ‘E’라는 키가 눌린 것으로 이벤트를 변조한 것입니다.
영화 속에서는 필요 없어진 해커를 제거하려고 해커의 컴퓨터에 바이러스를 업로드 하여 컴퓨터가 이상 작동을 하게 만듭니다.
그리고 컴퓨터의 이상 작동을 발견한 해커가 ‘Delete’키를 누르면(왜 누르는거지…?) 기폭 장치가 작동하도록 후킹 한 것 같습니다!
그럼 저희도 한 번 해봅시다!
import pyHook
def OnKeyboardEvent(event):
#Called whene key down even
return True
# Create hook manager
hooks_managere = pyHook.HookManager()
# Set callback for key down event ( Whatch for key down )
hooks_manager.KeyDown = OnKeyboardEvent
# Begins watching for keyboard events ( KeyDown )
hooks_manager.HookKeyboard()
pyHook 는 마우스와 키보드를 후킹할 수 있는 파이썬 라이브러리 입니다. ( 검색 하면 금방 다운 가능! )
키보드의 이벤트를 가져오기 위해선 HookManager 객체를 생성하여 키보드 이벤트에 대한 콜백을 제공해야 합니다.
여기선 KeyDown에 대한 콜백 함수로 OnKeyboardEvent 함수를 등록했습니다.
콜백(callback) 함수
사용자가 호출하는 함수가 아닌, 이벤트 발생시 호출되는 함수.
이벤트의 발생을 계속 확인하고 있지 않는다.
일반 함수 사용 : 출근 시간이 다가오는지 계속 확인하다가 출근 시간이 되면 출근한다.
콜백 함수 사용 : 출근 시간이 되어서 알람이 울리면 출근한다.
하지만 지금 이 상태로라면 프로그램이 그냥 끝나버립니다.
종료되지 않으면서 모든 메시지를 캡쳐하기 위해서 아래 코드를 추가합니다.
import pythoncom
# at last line
Pythoncom.PumpMessages()
PumpMessages 함수는 WM_QUIT(응용 프로그램 종료 요청) 메시지를 받을 때까지 현재 스레드에 대해 모든 메시지를 펌프해줍니다.
물론 루프를 포함하고 있습니다.
이제 OnKeyboardEvent 함수의 내용을 꾸며봅시다!
import subprocess
cmd = “C:\\boom.exe”
# Called whene key down even
def OnKeyboardEvent(event):
If event.Key == “Delete”:
subprocess.Popen(cmd)
return True
입력된 키가 Delete 키일 때, subprocess 모듈을 사용하여 C 디렉터리에 있는 boom.exe 파일이 실행되게 했습니다.
여기서 실행되는 boom.exe 파일은 컴퓨터 폭파를 대신하는 파일입니다.
# 키Booom!!!
저는 virtual keycode 의 값을 비교하기 위해 event.Key를 사용했지만 키보드 이벤트에 대한 다른 값들도 가져올 수도 있습니다.
자세한 내용은 여기를 참고하세요! :)
이 파이썬 코드는 cmd창에서 실행시키게 되는데 실행되는 모습이 발견되면 안되겠죠?
import win32gui, wind32console
win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win, 0) # Hide : 0
win32console 모듈의 GetConsoleWindow 함수를 사용하여 현재 프로세스가 사용하는 윈도우에 대한 핸들을 얻어오고,
win32gui 모듈의 ShowWindow 함수를 사용하여 해당 윈도우를 숨겨줍시다.
수고하셨습니다! 완성된 코드(hook.py)는 다음과 같습니다.
import pyHook, pythoncom
import subproccess
import win32gui, win32console
cmd = “C:\\boom.exe”
# Hide Window
win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win, 0)
# Callback for KeyDown
def OnKeyboardEvent(event):
if event.Key == “Delete”:
subprocess.Popen(cmd)
return True
# Create and Set HookManager
hooks_manager = pyHook.HookManager()
hooks_manager.KeyDown = OnKeyboardEvent
hooks_manager.HookKeybaord()
pythoncom.PumpMessages()
# 펑!
hook.py를 실행시키면 cmd 창이 사라지고, delete키가 눌리면 미리 준비해둔 exe 파일이 실행됩니다. 와 ^▽^
폭탄 없이 컴퓨터를 폭파시키는 방법은 없을까 해서 이것도 알아봤는데요,
폭파까지는 아니지만 바이오스 설정에 들어가서 냉각 팬을 비활성화 하거나
물리적으로 냉각 팬 연결을 끊은 상태에서 CPU나 그래픽카드의 사용률을 풀 로드 시키면 과열되어 탈 수 있습니다,
큰 이펙트는 일어나지 않고요.
또, 요즘은 열이 높아지면 이를 감지하고 블루스크린이 뜨니 센서도 비활성화 해야 한다고 합니다.
다시 영화로 돌아가볼까요? :)
머지않아 FBI의 사이버보안부가 해킹당합니다.
FBI에서는 이런 짓을 할만한 국내 해커들을 불러들이려고 하는데요,
형사인 맥 클레인이 매튜 패럴을 연행하러 갑니다.
어떤 일이 벌어질지는 다음 편에서 보도록 합시다 :)