회사 일 때문에도 그렇고, 트위터에도 많이 돌아다녀서 분석을 해보게 됐다.
코드를 티스토리에 올리면 혹여나 문제가 생길까 싶어 코드 자체를 올릴 수는 없을 것 같다.
현재 특정 사이트 내부에 해당하는 스크립트가 들어있어 사이트에 접속하면 자바스크립트 코드가 자동으로 실행되며 사용자의 PC CPU사용률은 100%까지 올라간다.
분석이라기 보다는 코드 해석을 해보겠다.
얼핏 보면 fetch요청을 하는 평범한 코드처럼 보이지만, 가장 중요한 키워드는
for문이 무한루프로 돌고 있다는 것과 비동기 처리, AbortController의 사용이다.
fetch를 사용할 때, signal이라는 옵션을 사용하여 controller.signal을 넣으면
controller.abort() 함수가 실행이 되었을 때, fetch 의 Promise 는 자동으로 reject 되게 되고 제어는 catch() 블럭으로 진입하게 된다.
쉽게 말하면, 요청한 서버의 응답을 기다리다가, controller.abort() 함수가 호출이 되면 fetch의 Promise는 자동으로 reject 되게 되고 제어는 catch() 블럭으로 진입하게 된다.
하지만 위의 코드를 보게 되면 timeout을 1000을 주었다 이것은 서버에 요청을 하고 무조건 1초 뒤에 controller.abort() 함수를 호출하겠다는 의미이다. 결국 정리하자면
서버에 요청을 보내고 응답시간에 관계 없이 1초마다 reject시키고 다시 요청하고 이것을 무한 반복 하여 DDoS공격을 한다는 것이다.
그리고 또 흥미로운 점은 DDoS 공격 URL에 파라미터를 랜덤으로 붙여서 요청을 보내는데,
이것은 사이트가 Cloudflare 나 Akamai 같이 DNS 서비스를 제공하는 업체의 서비스를 사용하고 있다면,
서브 URL의 값을 랜덤으로 줌으로써 캐싱 서비스를 타지 않고 바로 실 서버에게 공격을 가할 수 있게 된다.
이것도 쉽게 생각하면 www.naver.com 을 한번 접속하면, 이미지 또는 대형 데이터를 캐시에 저장하고 또 접속 했을 때 캐시에서 불러올 것이다. 하지만 서브 URL을 바꿔서 요청을 하면 URL이 달라졌기 때문에 똑같은 데이터라도 또 요청해서 캐시에 저장한다.
종합해보면,
서버의 서브 url을 랜덤으로 바꿔가며 응답시간에 관계 없이 1초마다 요청을 보내는 코드를 무한루프로 돌려 DDoS공격을 수행하는 스크립트이다.
혹시라도 틀린게 있다면 지적 부탁드립니다.
최근댓글