How to prevent replay attack?

Replay Attack 이란?

replay attack 은 공격자가 유효한 네트워크 데이터 패킷을 가로채서 이후에 다시 사용하는 네트워크 공격의 유형이다. 데이터를 다시 전송하여 시스템이 정상적인 데이터로 처리하도록 한다. replay attack 은 실제로 정상적인 요청으로 보이기 때문에 탐지가 어렵다. 덧붙여 원래 전송이 암호환된 경우에도 성공할 수 있다. replay attack 은 반복적인 요청을 통해 시스템에 과부하를 줄 수 있다. 이로 인해 시스템의 정상적인 작동을 방해할 수 있다.

공격자는 그림과 같이 데이터 전송이 시작될 때까지 기다린다. 이후에 통신 채널을 스니핑하여 데이터를 추출한다. 공격자는 데이터를 입수하여 목적에 따라 데이터를 수정해서 다시 사용할 수도 있다. 수신자는 변조된 데이터를 받았지만 정상적인 데이터로 취급한다.

대표적인 4가지 유형이 있다. 네트워크, 무선, 세션, HTTP 가 있다.

네트워크 replay attack 은 공격자가 네트워크 트래픽을 가로챈 후 나중에 다시 전송한다. Wireshark 또는 tcpdump 와 같은 도구를 사용한다. 무선 replay attack 도 동일하게 무선 통신을 가로챈 다음 다시 전송한다.

세션 replay attack 은 두 당사자 간의 세션을 가로챕니다. HTTP replay attack 은 공격자가 HTTP 요청과 응답을 캡처하여 HTTP replay attack을 실행한다.

실제 예시





앨리스가 웹을 사용하여 온라인 뱅킹 계좌에 로그인하려고 한다고 가정한다. 앨리스가 로그인 자격 증명을 입력하고 제출 버튼을 클릭하면 로그인 요청이 인터넷을 통해 은행 서버로 전송된다.

공격자 밥은 네트워크를 모니터링하여 로그인 요청이 전송되는 것을 캡처한다. 그런 다음 밥은 앨리스가 계정에서 로그아웃할 때까지 기다렸다가 캡처한 로그인 요청을 은행 서버로 재전송한다. 로그인 요청이 유효하므로 서버는 이를 수락하고 밥에게 앨리스의 계정에 대한 액세스 권한을 부여한다.

어떻게 하면 Replay Attack 을 방지할까?

메시지 인증 코드와 타임스탬프 혹은 논스 활용

 메시지 인증 코드(MAC)를 사용하는 것이다. MAC은 전송된 데이터에 포함된 암호화 체크섬으로, 진위 여부와 무결성을 보장한다. 그리고 MAC은 전송할 때마다 타임스탬프 또는 기타 값이 변경되어 공격자가 캡처한 전송을 재사용하기 어렵게 함으로써 리플레이 공격을 방지할 수 있다. 전송된 데이터에 타임스탬프를 포함하면 데이터가 특정 시간 프레임 내에서만 유효한 것으로 간주되어 리플레이 공격을 방지하는 데 도움이 된다. 또한 네트워크에서 데이터를 전송하는 동안 논스를 사용할 수도 있다. 논스는 전송된 데이터에 포함되는 무작위로 생성된 값으로 리플레이 공격을 방지하는 데 사용할 수 있다. 논스를 무작위로 생성하기 때문에 공격자가 논스를 정확하게 추측하거나 재현할 수 없을 것이다.

JTI

JWT 를 client 에서 생성하여 사용할 때 payload 에 JTI 를 사용한다. JTI 는 JWT ID 를 의미한다. JTI 는 고유한 JWT 를 식별할 수 있다. 따라서 client 에서 JWT 를 MAC 용도로 사용하고 버리는 방법이다. server 는 JWT 의 JTI 를 cache 혹은 database 에 저장하고 동일한 JTI 로 요청이 들어왔을 때 replay attack 으로 간주하고 요청을 거절할 수 있다.


예제

MAC 과 nonce 를 활용한 예제 코드이다. client 와 server 는 Http Method 와 path 그리고 UUID V4 의 랜덤한 문자열의 nonce 를 활용하여 sha512 HMAC 을 생성하여 서명으로 사용한다. 그리고 server 는 redis 를 사용하여 nonce 를 TTL 로 저장한다. TTL 시간동안 동일한 nonce 가 사용된다면 replay attack 으로 간주하고 요청을 거절한다. 

상세한 코드는 아래 github 을 첨부한다.







참고

댓글

이 블로그의 인기 게시물

About JVM Warm up

About idempotent

About Kafka Basic

About ZGC

sneak peek jitpack

Spring Boot Actuator readiness, liveness probes on k8s

About Websocket minimize data size and data transfer cost on cloud

About G1 GC

대학생 코딩 과제 대행 java, python, oracle 네 번째