서두
"웹해킹을 잘하려면 웹개발을 [많이 해봐야|잘해야]한다고 들었는데 맞는 말인가? CSS, React 같은 개념을 수준급 개발자처럼 다뤄야 하나?" 라는 질문에 대한 답변입니다.
- 쓰고나서 다시 읽어보니 너무 거칠게 요약한 내용도 있는데 초심자에게 쉽게 설명하기 위함입니다.
- 정정, 추가 코멘트 환영합니다. 초심자에게 많은 도움이 될 겁니다.
해킹을 잘하려면 컴퓨터 사이언스(=프로그래밍, 운영체제, 네트워크, 암호학, 알고리즘 등)를 잘 알아야 합니다.
쉬운 비유로는 알파벳 모르고 영어소설을 써서 노벨상을 받을 수 없다고 말을 하구요.
해킹(=취약점을 찾는 행위)은 개발자의 실수 혹은 무지를 꼬집는 행위입니다. 개발자의 실수를 지적하기 위해서는 당연히 이러한 요소들에 대해서 잘 알아야 합니다.
또 다른 현실적인 이유로는 해커의 수가 많아졌으며 상호 경쟁하는 관계라는 점을 들 수 있습니다. (물론 협력도 많이 합니다^^)
해커가 취약점을 발견하면 제보/발표하건, 악용하건 개발자에 의해 패치가 이뤄집니다.
제보하는 경우에는 가장 먼저 제보한 사람이 (거의) 모든 보상과 명예를 갖는 구조이며, 악용하는 경우에도 현업에서는 이미 제로데이 악용 사례를 탐색하고 발견하여 정보를 공유하는 시스템이 잘 갖추어져 있습니다.
따라서 해커들은 다른 해커가 발견하지 못하는 취약점을 찾기를 원하며, 이는 남다른 창의성, 기반 지식, 스킬을 필요로 합니다.
즉 좋은 해커가 되기 위해서는 (=해킹을 잘하기 위해서는) 컴퓨터 사이언스에 대한 지식이 필수적입니다.
다만 취약점이 발생할 수 있는 곳은 실행파일, 네트워크, 하드웨어 등 다양하게 있습니다. 이러한 모든 요소들에 대해서 잘 알기는 현실적으로 어렵기 때문에 보통 연관성있는 개념들을 묶어서 공부하며, 이걸 [웹해킹|포너블|리버싱|암호학]을 공부한다 라고 합니다.
분야를 한정 짓지 않고 모든 분야를 두루 잘 알아야 한다고 말하기도 합니다만 시간이 지나고 해킹에 대한 인류의 지식이 늘어나며(=공부해야 할 양이 점점 늘어나며) 점점 더 그러기 어려워질겁니다.
산업혁명 이전에는 전문가 1명이 집에서 양을 길러 실을 뽑고, 그 실로 목도리를 짜서 팔았지만 지금은 각각의 작업에 수많은 전문가가 필요한 것처럼요. (개인 의견입니다^^)
웹해킹을 잘하려면 웹 개발을 잘 알아야 합니다.
모든 해킹 분야가 개발을 잘 알아야 하지만 유독 웹해킹에서 이 말이 더 중요한 이유는, 대부분의 경우 코드가 우리 손에 없기 때문입니다.
리버싱이나 포너블의 경우 보통 실행파일을 대상으로 하며, 소스코드가 공개되어 있거나 적어도 컴파일된 바이너리를 보유한 채로 분석을 시작합니다.
반면 웹해킹의 경우 실행 중인 서비스를 대상으로 하는 경우가 많으며, 이 경우 당연히 우리는 코드를 볼 수 없습니다.
그렇기에 인풋과 아웃풋만을 확인하며 서비스의 구조, 코드를 예측해야 합니다.
당연히 해당 서비스에서 사용하는 기술, 유사한 구조/기능의 서비스들이 보통 어떻게 구현되는지 잘 알아야 예측이 가능합니다.
(오픈소스를 대상으로 공격할 경우에도 접근성이 좋고 유지보수가 쉽다는 웹서비스의 특성상 기능을 추가하거나 수정하는 일이 잦으며 이 경우 동일하게 적용됩니다)
프론트엔드도 잘 알아야 하나?
보통 웹해킹을 하는 경우에 백엔드에서 발생하는 취약점에 대해서 주로 다룹니다.
하지만 서비스/개발자 입장에서는 프론트엔드와 백엔드 모두 지켜야 하는, 보안 활동이 필요한 대상입니다.
즉 프론트엔드에서 발생할 수 있는 취약점 역시 연구가 필요하며, 브라우저는 가장 복잡한 소프트웨어 중 하나이기에 연구할 내용은 차고 넘칩니다. (처음부터 잘 설계되어서 만들어진 소프트웨어가 아니라 수 십년간 기능이 덕지덕지 추가, 변경, 삭제되었기에 더욱 넘칩니다)
이를 위해서 프론트엔드에 사용되는 HTML/JS/CSS 등에 대해서 잘 알수록 좋습니다. (CSS 역시 얼마든지 공격에 활용될 수 있습니다)
외에 프론트엔드를 위한 여러 보안 개념들 역시 잘 알수록 좋고요.
덤
다만 그치만 이렇게까지 자세하게 알 필요가 있는가? 빨리 페이로드 쏘고 쉘따는 해킹 해보고 싶다 라고 생각하실 것 같아서 추가 코멘트 하겠습니다.
HTML, JS, CSS 그리고 백엔드도 기본적인 문법만 익히고 백엔드에서 발생하는 취약점을 익히는 과정으로 넘어가도 괜찮습니다.
막 해킹을 입문한 경우에 흥미 유지가 가장 중요합니다.
알려진 공격기법을 익히다 보면 되긴 되는데 왜 되는지 잘 모르겠다 등의 이유로 점점 기반 지식의 부족을 느끼게 될 겁니다.
이 시점에 다시 돌아와서 필요한 기초지식을 쌓아도 괜찮으며, 오히려 취약점이 무엇이고 어떻게 작동하는지 이해한 상태에서는 기초지식을 익히는 데에 대한 동기부여가 되기에 이 방법을 더 권장합니다. (개인 의견입니다^^)
덤2
취약점에 대한 지식을 충분히 쌓았지만 아직 현업에 나서지 않은 웹해커들을 위해서 추가 코멘트 하겠습니다.
아시다시피 해커의 수는 아직 부족하며, 한국 해커의 수는 더더욱 부족합니다. 이는 점점 다양해지고 세분화되는 각각의 세부 분야에 대한 전문가가 부족하다는 뜻이기도 합니다. 웹해커들 사이에서는 서버 사이드를 대상으로 하는 취약점을 연구하는 분위기가 강하며, 그것이 CTF, 버그바운티 등에서 좋은 결과를 얻기에 유리한 것도 잘 알고 있습니다. 하지만 이는 클라이언트 사이드 혹은 남들이 잘 하지 않는 분야에 대한 인력 부족 현상이 심화되는(=블루오션화) 원인이기도 합니다. 사람이 몰리는 분야에 뛰어들어서 퍼포먼스를 뽐내고 결과를 쟁취하는 것 역시 좋은 방법이지만, 새로운 분야를 개척하는 선택지도 있다는 점 알아주세요. 우리는 연구자입니다. 꼭 저렇게 하란 건 아니고 넓은 시야를 가지라는 거죠~
-끝-
Title | Author | Vote | Hits | Created at |
---|---|---|---|---|
0 | 32 | 21 hours ago | ||
7 | 99 | 5 days ago | ||
Carlgustav
No badge
| 2 | 78 | 5 days ago | |
새싹(SeSAC)핀테크
No badge
| 0 | 63 | 6 days ago |