버그헌팅은 어떻게 하나요?
들어가며
예전에 블로그에 버그바운티이 무엇인가에 대해 작성한 글이 있다. 블로그 포스팅이 궁금하다면 이전 글을 참고해 주세요. 버그바운티 feat.Toss
버그 헌팅
오늘은 버그헌팅에 대해서 간단하게 알아보려고 한다. 버그 헌팅은 소프트웨어나 웹사이트에서 버그(오류)를 찾아내는 과정을 말한다. 이는 제품의 품질을 높이고 사용자 경험을 개선하기 위해 중요한 역할을 한다. 버그 헌터는 특정 시스템이나 애플리케이션을 철저히 테스트하고 그 과정에서 발생하는 문제점을 찾아내고 이를 회사(개발팀)에 보고 하는 역할을 한다. 물론 취약점을 발견한 뒤 제보하면 포상금이 따른다.
구글은 앞으로 10년동안 오픈소스를위한 버그바운티에 집중 하겠다고 발표 했다. 구글, “앞으로 10년은 오픈소스 버그바운티에 집중할 것”
버그바운티 자료는 생각보다 쉽게 접할 수 있었다. 많은 사람이 Writeup을 많이 공유했으니 내가 아직 버그 바운티에 대해 잘 모르겠다 싶으면 다른 사람들이 작성해 둔 Writeup을 많이 읽는 것 또한 좋은 방법일 수도 있다. 대표적으로는 HackerOne Writeup이 있다.
버그 헌팅 하기
그렇다면 우리는 어떻게 버그헌팅을 해야 할까? 우선 버그바운티를 하기 위해서는 계획을 세워야 한다. 내가 무엇을 테스트할지 경정해야 하고 그에 따른 계획을 세운다. 계획에는 어떤 테스트를 수행할지 어떤 도구를 사용할지 어떤 시나리오를 사용할지 등이 포함이 된다. 계획을 세운 뒤에는 환경 세팅을 하면 된다. 환경 세팅은 테스트를 수행할 환경을 준비하는 것이다.
이는 필요한 소프트웨어의 설치, 테스트 데이터의 준비, 필요한 하드웨어의 설정 등을 포함한다. 다음은 본격적으로 시작하면 된다. 이제 테스트 실행을 하는 건데 계획한 테스트를 수행한다. 이 과정에서는 다양한 입력값과 시나리오를 사용해 소프트웨어를 테스트하고, 예상치 못한 입력이나 사용자 행동을 시뮬레이션한다. 이제 중요한 결과 분석 및 문서화를 진행한다.
테스트 결과를 분석하고 버그를 찾는다. 발견된 버그는 구체적이고 명확하게 문서화되어야 한다. 버그 리포트는 버그의 원인, 버그가 어떻게 발생하는지, 버그의 영향 등을 포함해야 한다. 다음은 버그 리포팅을 작성한다. 찾아낸 버그를 개발팀에게 알린다. 일반적으로 버그 트래킹 시스템을 사용해서 버그를 관리한다. 마지막으로 재테스트 및 회귀 테스트를 한다.
버그가 수정된 후에는 그 버그가 제대로 수정되었는지 확인하기 위해 재테스트를 수행한다. 또한 수정 과정에서 새로운 버그가 생기지 않았는지 확인하기 위해 회귀 테스트를 수행한다.
주의할점
버그 헌팅이 가능한 회사인지 정확하게 알아보고 해야 한다. 내가 하고 싶다고 다 할 수 있는 건 아니다. 또한 모든 버그가 공격할 수 있는 것은 아니다. 예를 들어, 버퍼 오버플로우가 발생해도 완화 기법(mitigation) 때문에 공격을 할 수 없는 경우가 있다. 또한 많은 사람이 말하는 것처럼 가능한 빨리 취약점을 발견한 뒤 최대한 빨리 제보하는 게 좋다. 아무리 자신이 발견한 취약점이라고 해도 이미 누군가에 의해 패치된 것일 수도 있다. 또한 많은 소프트웨어에서 동일한 취약점이 발견되는 경우가 많기 때문에 먼저 신고한 사람이 포상받게 된다. 내가 가장 빠르다고 생각하는 순간 이미 누군가는 신고한다.
무엇을 공부?
- 리버싱 공부해야 한다 : 취약점을 찾기 위해서는 프로그램 분석이 필수이다. 따라서 꾸준하게 리버싱 공부해야 한다.
- 개발 능력: 사실상 가장 중요한 역량일 수 있습니다. 개발 능력이 있으면 리버싱 과정에 도움이 되며, 프로그램의 구조를 더욱 정확하고 빠르게 이해할 수 있다. 개발 능력이 없다면, 취약점을 찾아내는 과정이 상당히 어려워질 수 있다. 그래서 개발 역량을 기르는 것이 중요하다.
- 익스플로잇: 취약점을 찾아내고, 실행 명령어 포인터(eip)를 통제한 후에 다루게 되는 주제이다. 국내 프로그램의 경우, corelan의 ‘Windows Exploitation Tutorial’만 잘 읽어도 대체로 충분하다고 한다. 그러나 모든 프로그램에 대해 동일하게 적용될 수 있는 것은 아니므로, 이에 대한 세부적인 이해를 갖는 것이 중요하다.
방법은?
방법은 정말 다양한 방법들이 있다. 우선 소스코드 오디팅이 있다. 소스코드 오디팅은 소스코드를 점검하여 취약점을 찾는 방법이다. 이 방법은 해당 소스코드에 직접적인 접근 권한이 있어야 적용 가능하다. 주로 코드의 구조를 분석하며 가능한 보안 위렵을 찾아낸다.
다음은 처징과 손퍼징이 있다. 퍼징은 자동화된 방식으로 주어진 입력값을 임의로 변형하며서 테스트를 한다. 손퍼징은 수작업으로 이루어지는 퍼징 이다. 신뢰 할 수 없는 입력값을 직접 조작하면서 테스트를 진행 하는 방식이다. 퍼징에 비해 오래 걸린다.
퍼징에 사용되는 도구로는 BFF, Peach, AFL 등이 있다. 특히 BFF는 사용자 친화적인 인터페이스와 다양한 운영체제의 지원으로 인해 널리 이용되고 있다.
마무리
위의 방법을 통해 취약점을 찾아내는 거와 해당 취약점을 어떻게 이용할 수 있는지에 대한 이해가 중요하다. 또한 꾸준한 공부와 연구가 필요하다. 내가 돈을 벌고 싶다면 보상금이 높은 프로그램에 참여하면 된다. 단지 찾기가 너무나도 어렵다. 명예를 얻고 싶다면 CVE (Common Vulnerabilities and Exposures)를 발행할 수 있는 유명한 프로그램을 찾는 게 좋다 마지막으로 경험 혹은 지식을 얻고 싶다면 본인이 잘 알고 있는 혹은 자주 사용하는 프로그램으로 하는 게 좋다. 익숙한 프로그램을 대상으로 하면 리버싱이나 취약점 찾기가 더 쉬워질 수 있다.
3줄 요약
- 버그 헌팅은 소프트웨어나 웹사이트에서 버그를 찾아내는 과정이며, 이를 회사에 제보하면 포상금이 주어진다.
- 버그 헌팅을 위해선 소스코드 오디팅, 손 퍼징, 자동 퍼징 등 다양한 방법을 활용하며, 그 중에 선택하는 것은 개인의 목표와 관심사에 따라 다르다.
- 버그 헌팅을 시작하기 전에는 버그 헌팅이 허용된 회사인지 확인하고, 특히 취약점을 최대한 빨리 발견하여 제보하는 것이 중요하다.
추천 자료
책
웹 자료
OWASP Web Security Testing Guide
버그바운티에 도전할 때 공격 기법을 참고할 수 있는 사이트 소개
댓글남기기