JVM이 DNS 캐싱을 한다?

maketheworldwise·2022년 3월 14일
0


이 글의 목적?

JVM이 DNS 캐싱을 수행한다는 말을 최근에 접하게 되었다. 정리해보자.

JVM DNS 캐싱

JVM은 DNS 룩업시 TTL 전략을 사용하지 않고 한번 룩업한 도메인 이름은 내려갈 때까지 계속 캐싱을 하고 있다. 이는 DNS Spoofing 공격으로부터 예방하기 위해서다.

💡 DNS Spoofing 공격은 뭘까?

DNS Spoofing은 사용자가 접속하고자 했던 사이트가 아닌 공격자의 사이트로 리다이렉션하는 공격기법이다. DNS 쿼리 질의를 공격자가 중간에 가로채어 위조된 IP 주소로 대신 응답하여 공격자의 사이트로 유도하는 공격이다.

IP 변동 가능성 문제와 해결 방안

공격을 예방하는 부분은 좋지만, 단 한번만 룩업하기 때문에 JVM이 올라간 후에 IP가 변경되면 계속 이전 IP로 접속되는 문제가 발생한다. 해결책은 간단하다. JVM을 내렸다가 다시 올리면 된다.

또 다른 방법으로는 TTL을 사용하도록 자바 SecurityManager의 정책을 수정한 후에 JVM을 구동시키는 방법이 있다. 수정 대상 정책은 다음과 같다.

  • networkaddress.cache.ttl : 성공한 DNS 룩업에 대해 캐싱 여부
  • networkaddress.cache.negative.ttl : 실패한 DNS 룩업에 대해 캐싱 여부

수정할 정책은 Security 파일을 수정하거나 소스단에서 처리할 수 있다. 😉

  1. $JRE/lib/security/java.security
# networkaddress.cache.ttl=-1 (기본값, Cache Forever)
networkaddress.cache.ttl=60
  1. 앱 소스에 호출하여 수정
static {
    java.security.Security.setProperty ("networkaddress.cache.ttl" , "60");    
}

이 글의 레퍼런스

profile
세상을 현명하게 이끌어갈 나의 성장 일기 📓

0개의 댓글