솔직히 자바가 지긋지긋하다. 이런 생각을 갖고 있는 사람이 필자뿐만은 아닐 것이다. 특히 최근 자바에는 소리소문 없는 변화가 많았다. 하지만 지겹다고 내버려둘 수는 없는 일. 일단 자바의 현황부터 짚어보자.
가장 앞서 말할 부분은 현재 자바에는 3종의 ‘최신’ 및 ‘현재’ 버전이 있다는 점이다.
과거에도 2종의 ‘현재’ 버전이 있었다. 오라클은 새 버전으로 옮겨갈 수 있도록 허용하면서 2종의 자바 버전을 유지했었다. 지금도 구 버전인 7과 새 버전인 8 모두를 대상으로 버그 픽스를 배포하면서 똑 같은 일을 하고 있다. 버전 7은 2014년 4월 ‘퇴역’이 예정되어 있다.
자바 7 구 버전을 사용하고 있는 윈도우 사용자는 자바 7 최신 버전이나 자바 8으로 업그레이드해야 한다. 자바 자동 업데이트 시스템은 자바 7에서만 지원된다. 2015년 초까지는 바뀌지 않을 예정이다. 그러나 자바 7을 자바 8으로 바꾸는 다른 자바 업데이트가 있다.
최신 자버 버전인 자바 8를 위한 업데이트 25가 2014년 10월 14일 배포됐다. 이후 자바를 새로 설치할 경우에는 버전 7이 아닌 버전 8이 설치되고 있다.
현재 사상 처음으로 자바 7에는 최신 버전이 2개가 존재한다. 업데이트 71과 업데이트 72이다. 오라클의 ‘기본 값’은 자바 7 구버전을 업데이트 71로 업데이트하는 것이다.
업데이트 72와 71의 보안 관련 버그 픽스는 동일하다. 그러나 72에는 보안 외 추가 패치가 포함되어 있다. 오라클에 따르면, 업데이트 72는 “업데이트된 기능을 테스트하기 위해 보안 외 추가 개선된 부분이 필요한 사용자와 개발자를 위한 업데이트”이다. 업데이트 72의 추가 픽스는 자바 7의 차기 버전에 탑재될 예정이다.
푸들(POODLE)
최근, SSL 버전 3에서 발견된 푸들(POODLE) 취약점 때문에 가능한 경우 SSL 버전 3를 비활성화 시키고, TLS 3개 버전(1.0, 1.1, 1.2) 모두를 활성화시켜야 한다. 웹마스터는 서버에서, 일반 사용자는 브라우저에서 이와 같이 설정해야 한다.
이와 관련해 (내가 알기로) 아직 누구도 언급하지 않은 문제가 있다. 자바 사용자 또한 이와 동일하게 조정해야 한다는 것이다.
방법은 다음과 같다. 윈도우 시스템에서는 제어판의 자바로 들어가 고급(Advanced) 탭을 연다. 그리고 아래로 스크롤을 한다. 인터넷 익스플로러에서와 같은(그러나 관련 없는) SSL/TLS 옵션이 있을 것이다.
자바 7의 경우 인터넷 익스플로러에서와 마찬가지로 SSL 3.0과 TLA 1.1이 기본 값으로 활성화되어 있다. SSL 3.0을 끄고, TLS 1.1과 1.2를 켠다. 자바 8에서는 4종의 프로토콜 모두 기본 값으로 활성화되어 있다. 따라서 SSLv3만 비활성화시키면 된다.
자바 7과 8의 SSL/TLS 옵션 아래에는 흥미로운 체크박스(checkbox)가 하나 있다. ‘Suppress sponsors offers when installing or updating Java(자바 설치나 업데이트 때 스폰서의 서비스를 거부)’라는 체크박스이다. 꺼져 있는 것이 기본 값이지만, 필자라면 활성화시켜 두겠다.
자바 보안
웹 페이지에 내장된 자바 프로그램(애플릿)을 실행시키기가 갈수록 어려워지고 있다. 자주 규칙이 바뀌고, 웹 브라우저와 오라클의 경고 메시지가 뜨는 경우가 일반적이 되고 있다.
또 전자 서명된, 또는 서명 되지 않은 애플릿(applet)인지에 따라 2가지 규칙이 존재한다. 그리고 자바 7과 자바 8에 차이점이 있다.
서명이 있는 애플릿은 호스트 운영 시스템이 허락한 모든 기능을 정상적으로 실행할 수 있도록 처리된다.
반면 서명이 없는 애플릿은 호스트 시스템과 분리된 자바 샌드박스에서 실행된다. 샌드박스는 완벽하지 않다. 상식적으로는 샌드박스에 가둔 애플릿은 더 안전하다고 생각할 것이다. 하지만 오라클은 이를 더 위험한 것으로 판단한다. 개인 의견으로는 오라클이 ‘Certificate Authority’ 시스템을 지나치게 믿고 있다는 판단이다. 오라클은 이들 미서명 애플릿의 보안 위험이 더 크다고 생각하기 때문에 서명 애플릿보다 실행이 힘들도록 만들었다.
애플릿 실행에 있어 또 다른 중요 요소는 자바 보안 수준이다. 자바 7에는 3가지 보안 수준이 있고, 자바 8은 (업데이트 20을 기준으로 했을 때) 자바 7에서 가장 높은 2가지 보안 수준을 갖고 있다. 두 버전 모두 기본 값은 2번째로 높은 보안 수준인 ‘높음(High)’이다.
이 ‘높음’이라는 보안 수준은 기본 값으로 서명이 없는 애플릿의 실행을 막게 되어 있다. 서명이 없는 애플릿을 실행시키기 위해서는 먼저 화이트리스트로 처리해야 한다. 가장 높은 보안 수준인 ‘아주 높음(Very high)’은 서명이 없는 애플릿 모두를 차단하도록 되어 있다 (아래 더 자세히 설명한다).
이게 다가 아니다.
자바 보안 수준 위에 ‘Enable Java content in the browser(브라우저에서 자바 콘텐츠 허용)’이라는 옵션이 하나 있다. 즉 브라우저에서 자바 애플릿을 실행시키도록 허용했을 때만 자바 보안 수준이 적용된다. 기본 값은 브라우저에서 자바를 실행시킬 수 있도록 되어 있다.
가능하다면, 모든 브라우저에서 자바를 비활성화시키는 것이 훨씬 더 안전하다. 자바와 보안 관련 취약점은 브라우저에서 애플릿을 실행시킬 때만 드러나기 때문이다.
브라우저에서 자바를 비활성화시켰을지라도 자바에 의존하는 애플리케이션을 실행시킬 수 있는 경우가 일반적이다. 이들 애플리케이션은 윈도우 프로그램이 .NET 프레임워크를 사용하는 방식과 유사하게 자바를 사용한다. 우알라(Wuala), 마인크래프트(Minecraft), 오픈오피스(OpenOffice) 등이 자바를 필요로 하는 윈도우 프로그램들이다.
브라우저에서 자바가 필요하다면, 가장 자주 쓰는 브라우저에서는 자바를 비활성화 하고, 자바를 쓰는 웹사이트용으로 두 번째 브라우저를 사용하면서 여기에서 자바를 켜두는 것이 최상이다.
시스템 곳곳에서 자바를 비활성화시켜 놓으면, 브라우저는 자바가 설치되지 않은 것처럼 작동을 한다. 파이어폭스(Firefox)와 크롬(Chrome)의 경우 설치된 플러그인 목록에 자바가 없다. 인터넷 익스플로러 11은 윈도우 및 자바 버전에 따라 자바가 설치되어 있다는 표시가 나타나거나, 나타나자 않을 수 있다.
한편 브라우저에서 자바를 사용할 수 있도록 설정한 경우, 윈도우 7에서는 ‘기이한 일’이 발생한다.
자바 8 업데이트 25가 설치되어 있다면, 파이어폭스 33 플러그인은 ‘Java Deployment Toolkit version 8.0.250.18 is known to be vulnerable. Use with caution. (자바 배치 툴킷 버전 8.0.250에는 알려진 취약점이 있으니, 주의해서 사용하십시오)’라는 무서운 경고가 뜬다. 이 파이어폭스의 오류 메시지에 주의를 기울여야 한다.
(주소 막대에 chrome://plugins을 입력하면 확인할 수 있는) 크롬 38 플러그인은 자바 버전을 11.25.2.18로 알려준다. 자바 8 업데이트 25 참조 정보를 보기 위해서는 상세 보기를 선택해야 한다. 이는 필자가 운영하는 JavaTester.org에서 확인할 수 있다.
애플릿 실행
자바 최신 버전이 설치되어 있고, 애플릿에 디지털 서명이 있는 최상의 경우에도 애플릿 실행 전에 자바 경고 메시지가 뜬다 (보안 수준이 ‘높음’으로 되어 있을 경우). 아마 자바가 지구상에서 가장 큰 보안 취약점으로 알려진 것에 오라클이 질려서 그런지도 모르겠다.
더 자세히 설명하면, 설치된 자바 버전을 감지한 후, 오라클이 직접 서명한 애플릿을 실행시킬 때도, 그 전에 ‘Do you want to run this application (이 애플리케이션을 실행하기 원합니까)’라는 질문을 묻는다. 자바 7과 8 모두 동일하다.
‘높음’ 보안 수준에서 화이트리스트로 등록하지 않은 미서명 애플릿을 실행시킨다면 자바 7에서는 ‘Application Blocked by Security Settings (보안 설정이 차단한 애플리케이션)’, 자바 8에서는 ‘Application Blocked by Java Security (자바 보안이 차단이 애플리케이션)’이라는 오류 메시지가 표시된다.
이 문제를 해결하기 위해서는 미서명 애플릿을 이용하는 웹사이트를 자바의 ‘Exception Site list (예외 적용 사이트 목록)’에 추가시켜야 한다. 자바 제어판(Java Control Panel)의 보안(Security) 탭에서 이 설정을 할 수 있다 (아래 참조). ‘Edit site list’ 버튼과 ‘Add’ 버튼을 클릭한다. 웹사이트 이름 앞에는 ‘http://’가 적혀있어야 한다. 예를 들어, ‘something.com’과 ‘www.something.com’을 예외로 지정하려면, 둘 모두 화이트리스트로 등록해야 한다.
화이트리스트로 처리한 이후에도, 미서명 애플릿을 실행하면 (‘높음’ 보안 수준에서) 아래와 같은 질문이 표시된다. 이는 자바 7과 8이 동일하다.
이게 다가 아니다. 브라우저도 경고 메시지를 띄운다.
대다수 브라우저가 그렇다. 테스트 결과, 오페라(Opera) 버전 12.17은 윈도우 7과 8.1 모두 자바를 ‘무시’해 버렸다. 애플릿을 실행시킬 수 없는 것은 물론, 오류나 경고 메시지도 표시하지 않는다는 의미다.
제 기능을 하지 않는 ‘아주 높음’ 보안 수준
‘아주 높음’ 보안 수준에서는 미서명 애플릿이 실행되지 않는다. 최소한 오라클은 그렇게 주장한다.
자바 8은 이에 대해 ‘Only Java applications identified by a certificate from a trusted authority are allowed to run, and only if the certificate can be verified as not revoked (신뢰할 수 있는 인증서로 확인된 자바 애플리케이션만 실행되며, 이 인증서가 취소된 인증서가 아니어야 함)’이라고 설명한다.
그러나 문제가 있다.
JavaTester.org에서 테스트를 한 결과, 윈도우 7과 자바 7 및 8 환경에서 서명이 없는 애플릿을 실행시킬 수 있었다. 파이어폭스 33과 크롬 38에서도 테스트한 결과다.
때때로 리부팅이 필요한 경우가 있었지만 윈도우를 다시 부팅한 이후에는 애플릿을 실행시킬 수 있었다.
오라클은 해결해야 할 문제가 많다.
자바 만료
오라클은 2012년 12월 자바 런타임(JRE 또는 JVM) 만료(expiring)라는 개념을 도입했다. 자바 7 업데이트 10 이후 버전 각각에는 일종의 보안 도구로 만료일이 지정되어 있다. 실제 만료일은 2개다.
짧은 만료일은 자바 업데이트 배포 후 약 3개월 정도이다. 그러나 오라클 서버와 통신하지 못하는 클라이언트인 컴퓨터의 자바 버전 만료일은 4개월이다.
오라클은 이를 다음과 같이 설명한다:
<JRE는 오라클 서버와의 정기적인 확인 과정을 필요로 한다. JRE가 모든 사용 가능한 보안 픽스에 관련해 최신 상태인지 여부를 확인하는 것이다. 과거에는 JRE가 오라클 서버와 연결되지 않는다면 보안 최신 버전인 상태로 간주돼 동작했다. 이를 피하기 위해… 모든 JRE들은 앞으로 하드코딩된 만료일을 내장하게 된다… 오라클 서버와 연결되지 못하는 JRE들은 합리적인 기간 이후 추가 보호를 제시하게 될 것이다.그리고 ㅊ이전과 같이 동작을 지속하지 못할 것이다.>
여기서 ‘추가 보호’란 경고 메시지다.
자바 7 업데이트 60은 포닝 홈(서버와 클라이언트가 통신할 경우)이 가능하다면 2014년 7월 15일, 불가능하다면 2014년 8월 15일에 만료가 되도록 예정되어 있다. 그렇지만 필자는 2014년 10월에 업데이트 60이 설치된(‘높음’ 보안 수준) 윈도우 시스템에서 서명이 없는 애플릿을 실행시킬 수 있었다.
아래와 같이 ‘만료’를 알리는 경고 메시지가 표시됐지만, 애플릿 실행에는 지장이 없었다.
iOS와 안드로이드, 크롬 OS의 가장 큰 장점은 웹 브라우저에서 자바 사용을 지원하지 않는 것일지도 모르겠다.
*Michael Horowitz는 독립 컨설턴트로, 방어적 컴퓨팅(Deffensive Computing) 분야를 중점적으로 다루고 있다. dl-ciokorea@foundryco.com