XSpear Reborn: Big Changes Coming
제가 Dalfox 를 개발하기 전에 Ruby로 작성했었던 XSpear란 도구가 있었습니다. 동일하게 XSS를 테스팅하기 위한 도구였고, 현재 성능은 당연히 Dalfox쪽이 압도적으로 좋은 상태입니다. 그리고 작년부터 XSpear에 대한 Reborn 계획을 생각해 두었었는데, 최근 만들던 도구도 어느 정도 윤곽이 잡혀서 이제 본격적으로 XSpear에 대해 대규모 개편을 진행하려고 합니다.
오늘은 어떤 형태로 XSpear가 바뀌게 될지 간단하게 로드맵을 공유해 볼까 합니다.
Why
XSpear는 마지막 커밋이 작년 9월이지만 Github action 쪽의 간단한 변경으로 유지 보수에 필요한 커밋을 제외하면 약 3년 정도 멈춰있는 프로젝트입니다.
기본적인 기능은 충실하고 있어서 쓰는데 문제는 크게 없겠지만 유지되지 않는 프로젝트는 점차 힘을 잃기 마련입니다.
Roadmap
Ruby to Crystal
가장 큰 변화를 고려한 것이 바로 언어의 변경(Ruby -> Crystal)입니다. Ruby는 분명히 좋은 언어지만 속도 등 태생적인 한계 또한 존재합니다. 그래서 문법적인 유사성을 강하게 띠면서 컴파일 언어인 Crystal로 변경하려고 합니다.
개인적으로도 관심이 많은 언어이고 최근에 진행한 CLI 도구 관련 프로젝트는 Crystal로 진행하고 있습니다. 특히 Attack Surface 분석 도구인 Noir를 개발할 때 Crystal을 사용했고 손에 굉장히 잘 맞아서 앞으로 다른 프로젝트에서도 적극적으로 사용할 예정입니다.
Noir 는 초기 구성을 Go로 구현했다가 Crystal로 변경하면서 본격적으로 진행된 프로젝트입니다.
For Manual Testing
XSpear는 초기의 방향성을 유지하여 개편된 버전 또한 Manual Testing을 중점적으로 다룰 예정입니다. 여러 형태의 Input(URL, Form, JSON, DWR, ETC..)을 지원하고 각 파라미터 등 Fuzzing 포인트에 대한 디테일한 결과를 제공하려고 합니다. 아무래도 Dalfox와 비교해 볼 수 있을텐데 Dalfox는 대규모 URL을 대상으로 병렬 스캔에 특화된 도구라면 XSpear는 단일 대상을 심층 분석하기 위한 도구로 Reborn이 모두 진행된 시점에선 XSpear가 더 디테일한 정보를 줄 수 있을 것으로 생각됩니다.
For Exploiting
Dalfox를 포함한 대부분의 XSS 도구는 탐지에 초점이 맞춰져 있습니다. 똑같은 XSS 지만 어떤 보안 리스크를 만들고 증명하냐에 따라 영향도는 크게 달라질 수 있습니다. Reborn 과정에 핵심 목표 중 하나는 Exploit에 대한 부분을 많이 제공하려고 합니다. 탐지한 XSS를 사용자에게 알림과 동시에 가능한 Exploiting 방법들을 통해 리스크를 올릴 수 있는지 테스트하고 제공해주는 그런 기능입니다.
Input Format
입력 포맷에 대해 아래와 같은 형태로 변경할 예정입니다.
xspear <METHOD> <URL> <OBJECT>
# OBJECT는 Form, JSON 등 여러 데이터 타입을 의미하고 자동으로 파싱합니다.
# Example: xspear POST https://localhost/search "q=cat" "Cookie: sessions=1234454;"
개인적으로 굉장히 좋아하는 http client인 HTTPie에서 많은 영감을 받았습니다. 그래서 비슷한 형태의 Input을 사용하여 복잡한 flag 없이 쉽게 사용할 수 있도록 바꿀 예정입니다.
XSSMaze
이러한 Reborn을 위해 준비하고 있던 것이 하나 있었습니다. 바로 XSSMaze인데요. 여러 레벨별 XSS 취약 페이지를 제공하는 웹 서비스로 이를 이용하여 식별할 수 있는 케이스를 늘리려고 합니다. 이는 XSpear 개편과 별개로 Dalfox 또한 동일하게 적용하여 분석 커버리지를 늘릴 생각이에요 :D
Closing Thoughts
제가 만든 2개의 도구를 경쟁시키는 것 같아 한편으론 살짝 도구에 미안하기도 하지만 여러모로 재미있는 작업이 될 거란 생각이 들고 있습니다. Reborn 과정은 늦어도 올해 안에 마무리해서 만나볼 수 있도록 해보겠습니다 :D