지난 2월 클라우드플레어는 초당 7,100만 요청이 이뤄진 디도스 공격을 받았다. 이는 2022년 6월 구글 클라우드가 받은 초당 4,600만 요청을 넘는 사상 최대 규모 HTTP 디도스 공격이었지만 이를 거짓말처럼 넘어선 초당 3억 9,800만 요청에 이르는 공격이 있었다고 구글 클라우드가 보고하고 있다.
지난 6월 클라우드플레어에 대한 공격은 최대 2,600만 요청 규모가 급격하게 증가했지만 2022년 8월 구글 클라우드에 대한 공격은 최대 초당 4,600만 요청으로 확대됐고 2023년 들어 클라우드플레어에 대해 초당 7,100만 요청 디도스 공격이 보고됐다. 이어 8월 새로운 공격이 이뤄졌다. 이 공격은 정점에서 초당 3억 9,800만 요청에 이르는 것으로 규모는 이전보다 7.5배 확대됐다. 구글에 의하면 공격은 2분간 이뤄졌으며 규모는 2023년 9월 1개월간 위키피디아 전체 열람수보다 많은 것이었다고 한다.
같은 시기 클라우드플레어에서 정점 기준 초당 2억 1,000만 요청이 넘는 공격이 관측됐으며 AWS에서도 초당 1억 5,500만 요청을 관측하고 있다. 구글은 이 공격을 막았지만 8월말 이후 공격은 여전히 구글 서비스나 구글 클라우드 인프라, 구글 고객을 포함한 인프라 프로바이더를 대상으로 계속되고 있다고 한다.
구글, 클라우드플레어, AWS는 서로 대규모 공격이 발생하는지 확인하고 공격 원인이 HTTP/2 프로토콜 일부 기능과 서버 구현을 악용해 이뤄지고 있다는 걸 밝히고 있다. 이 내용은 취약점 CVE-2023-44487로 보고됐다.
이번 공격은 HTTP/2 래피드 리셋 공격(HTTP/2 Rapid Reset Attack)이라고 표현되고 있다. HTTP/2 프로토콜에선 클라이언트는 RST_STREAM 프레임을 송신해 이전 스트림을 취소할 필요가 있는 걸 서버에 명시할 수 있다. 이때 서버와 클라이언트는 취소를 조정할 필요가 없으며 클라이언트가 일방적으로 취소할 수 있다. 서버가 RST_STREAM 프레임을 받으면 클라이언트는 다른 데이터가 처리되기 전에 취소가 곧바로 적용된다고 가정한다.
따라서 엔드포인트에서 여러 스트림을 열고 서버나 프록시로부터의 응답을 기다리지 않고 곧바로 스트림을 취소하고 또 스트림을 여는 게 HTTP/2 래피드 리셋 공격이다. 스트림이 곧바로 취소되기 때문에 공격자는 동시 오픈 스트림 수를 초과하지 않고 요청을 계속 보낼 수 있다.
로드밸런서와 프록시 서버로 작동하는 오픈소스 소프트웨어(HAProxy)는 2018년 출시된 버전 1.9에서 개발된 코드를 통해 해당 취약점에 이미 대응됐으며 영향을 미치지 않는다고 밝혔다. 또 웹서버 시스템 NGINX는 성능과 리소스 소비를 이유로 초기 설정으로 동시 스트림 수를 128, HTTP 킵얼라이브를 1,000으로 하고 이 값으로 운용하면 문제가 없다고 설명하고 있다. 관련 내용은 이곳에서 확인할 수 있다.