여러분은 해킹이 무엇이라고 생각하시나요?
관련하여, 이야기를 하나 들려드리겠습니다.
개발자가 생각한 프로그램
버 그
소프트웨어의 버그는 평생 개발자를 따라다니며 괴롭힙니다. 그리고 시간이 흐르면 한 가지를 깨닫게 됩니다. 무슨 짓을 해도 버그로부터 도망칠 수 없다는 사실을 말입니다.
버그 때문에 막혀버리면 "왜 안 되지???"를 고민하고, 반대로 잘 되더라도 "이게 왜 되지???"를 심각하게 고민하며 오늘도 개발자는 버그와의 인연을 이어가고 있습니다. 이러한 현상은 컴퓨터 역사가 시작된 이래로 바뀐 적이 없으며 미래에도 계속될 것입니다.
안타깝게도 운명입니다. 개발자가 아무리 똑똑해도, 개발사가 아무리 탄탄해도 다 소용없습니다. 사람이 하는 일이라면 완벽에 가까울 수는 있어도 완벽이란 있을 수 없기 때문입니다. 그러므로 버그는 일정 비율로 꾸준히 발생할 수밖에 없는데 이는 자연스러운 현상입니다.
이러한 버그에는 급(Level, 수준)이 존재합니다. 이중에는 보스급 버그도 있는데, 우리는 이것을 "보안 취약점(이하 취약점)"이라고 부릅니다. 이것은 악성 행위를 촉발할 수 있으며, 이 때문에 누군가는 정신적/물리적/금전적 피해를 입을 수도 있습니다.
현대 사회에서 취약점으로 인한 피해는 단순히 개인정보 유출 수준이 아닙니다. 차량이 오작동하고, 의료 사고를 일으키며, 전력 공급과 공장 가동이 중단될 수 있습니다.
프로그램 출시 후, 2~3년 동안 아무도 모르게 잠복해있는 취약점은 무수히 많습니다. 9년 동안 알려지지 않았던 취약점(Dirty cow)도 있었고, 37년 만에 해결된 취약점(오픈 BSD head 버그)도 있었습니다.
현재도 확인된 지 20년 된 취약점(MS 로그인 취약점 이슈)이지만 개발사에서도 방치하는 취약점도 있습니다. 그런데 그 개발사가 윈도우를 개발한 마이크로소프트라면 어떤 생각이 드시나요? 과연 십만 명이 넘는 직원 중 이 문제를 해결할 수 있는 인원이 단 한 명도 없어서 그랬을까요?
결론적으로, 아무리 뛰어나도 세상 모든 취약점에 대처할 수는 없습니다. 취약점의 존재 여부를 미리 알 수 없거니와, 식별하더라도 이에 대응하고 관리하는 것은 또 다른 영역이기 때문입니다.
디지털 오일
근미래에 고갈될 예정이라던 원유는 세계적으로 점점 더 그 매장량이 증가하고 있습니다. 얼마 전 미국에서는 텍사스에서 대규모 유전을 발견하였는데, 이에 따라 미국이 곧 미국을 침공할 예정이라는 유머가 돌 정도였습니다.
관련하여 취약점은 원유와 닮은 면이 있습니다. 세계 원유 매장량이 점점 증가하듯, 취약점 보고 횟수도 증가하고 있기 때문입니다. 위 자료는 연도별 취약점 보고 개수인데, 17년에 약 2만여 개가 발견되었고, 18, 19년에는 각각 2만 2천 개가량이 발견된 것으로 보고되는 등 꾸준히 증가 추세에 있습니다.
발견 시 정제하여 판매하면 돈이 된다는 점도 닮았습니다. 세계의 다양한 플랫폼에서, 취약점은 등급에 따라 적게는 수십 달러에서부터, 많게는 건당 200만 달러까지 그 가치가 평가되고 있습니다.
또한 원유 매장량이 증가하는 일반적인 경우는 3가지가 있는데, 이는 취약점에도 그대로 적용됩니다.
첫 번째는, 새 유전을 발견하는 경우입니다.
→ 알려진 취약점이 묻은 채로 개발된, 새 프로그램을 발견하는 경우입니다. 프로그램은 컴퓨터 언어를 하루만 교육받더라도 특별한 제약 없이 개발할 수 있는 특징이 있습니다. 하지만 매년 꾸준히 쏟아지는 취약점에 대한 대책을 프로그램 개발 시 모두 반영하는 것은 현실적으로 불가능합니다.
두 번째는, 기술의 발전으로 기존의 유전에서 생산량이 향상되는 경우입니다.
→ 해킹 기술의 발전으로 기존의 프로그램에서 새로운 취약점을 발견하는 경우입니다. 너무나 안정적이어서 패치가 필요 없다고 생각되던 프로그램에서도 취약점이 발견되는 사례는 적지 않습니다.
마지막은, 기술의 발전으로 원유를 채굴할 수 있는 자원(물질)의 범위가 확대되는 경우입니다.
→ 해킹 기술이 발전함에 따라 취약점을 발견할 수 있는 자원(프로그램)의 범위가 확대되는 경우입니다. 이는 "그런 (사소해 보이는) 곳에서도 취약점이 발견된다고?"라고 생각될 수 있는 영역입니다.
하지만 다른 부분도 존재합니다. 원유 탐사 및 채굴은 조직적인 규모로 접근해야 하는 반면, 취약점 발견의 경우, 첨단 IT 기술을 기반으로 긱(gig) 경제가 확대됨에 따라 개인으로도 활동할 수 있는 환경이 점점 확대되고 있다는 점입니다.
그러면,
Q. 그러면, 취약점 발견은 어떻게 할 수 있을까요?
A. 취약점 발견을 위한 장비(툴)가 필요하며 관련 능력을 계발해야 합니다.
하지만 장비와 능력을 따로 떨어뜨려 생각할 필요는 없습니다. 실제와 유사한 가상 환경에서 취약점을 발견하는 트레이닝을 진행하면서 툴을 사용해보고 관련 능력도 기를 수 있습니다.
하지만 이를 위한 자료가 부족한 것이 현실입니다. 기초부터 튼튼하게 해야 한다고 말하는 각종 교육에서는, "C 언어 등을 먼저 시작해야 한다."고 이야기하면서 목표의 주변을 지속 맴돌게 합니다. 이는 시간이 지날수록 진이 빠지는 접근 방식이며, 목적지까지 시간이 많이 소요되므로 적합성을 판단하는데 매우 불리합니다. 막상 해봤는데 성향과 맞지 않으면 기회비용에 따른 실망감도 클 것입니다.
기초라고 언급되는 것들은 대부분 허상입니다. 사람들은 자기가 아는 것은 "기초이며 상식"이라고 말하며 모르는 것은 화를 내며 숨기거나 "잘못된 것"이라고 말합니다. 단순히 익숙하지 않을 뿐이지만 그렇게 하는 것이 아니라고 자신 있게 주장합니다.
그러나 실제로 어디부터 시작해야 한다는 정해진 순서 같은 것은 없습니다. 무엇부터 시작하더라도 어차피 모르는 것은 끊임없이 눈앞에 나타날 것입니다. 때로는 순서가 바뀌었다는 생각이 들 수도 있습니다. 하지만 그것이 틀렸다는 것을 의미하는 것은 아닙니다. 주변을 맴돌며 힘을 빼는 것보다는 어떻게든 유리하기 때문입니다.
그러므로 더는 교육 커리큘럼에 목메시지 않기를 희망합니다. 순서가 바뀌었다면 순서가 바뀐 대로도 의미가 있고, 어렵다면 그중에서도 할 수 있는 부분이 분명 있습니다. 중요한 점은, 넘을 수 없는 벽을 만났을 때의 마음가짐입니다. 지금 할 수 없는 것은 어쩔 수 없지만, 앞으로도 불가능할 것인지는 지금의 마음에 달려 있습니다.
우리는 지금까지, 이런 저런 이유로 불가능하다는 생각에 대해 너무 관대했습니다. 그러나 시간이 지나고 생각해보면, 많은 경우 변명일 뿐이었다는 사실을 스스로는 알고 있습니다. 이제 더 이상은 안 되는 이유들을 찾아가며 스스로를 괴롭히지 않으시길 희망합니다. "안타만 꾸준히 쳐도 결국 승리한다."는 말이 있듯이, 수용하는 자세로 임하다 보면 어느 날 길은 열릴 것입니다. 그렇게 결국 이루어낼 것입니다. 이 여정을 함께하시지 않겠습니까?
관련하여, "취미로 해킹" 시리즈는 취약점 발견 트레이닝 목적으로 제작된 콘텐츠입니다. 가상 환경을 기반으로, 툴 사용법 및 관련 능력을 폭넓게 계발하는 것에 도움이 되도록 구성하였습니다. 취약점 발견의 첫걸음을 떼실 수 있으며, 현재 가용한 콘텐츠는 아래와 같습니다.
※ 참고 사항
1. 상호 연관성 고려 시, "권장" 순서는 취미로 해킹 #2 → #1 → #3 → #4 → #5 입니다.
2. 카페에는 정기적으로 상기 콘텐츠 관련된 학습 보조 자료가 제공됩니다.