바이러스토털 "윈도 코드서명 검증기능 회피 공격 가능"

MS-구글 보안전문가 악성 윈도SW 유포 방지 협력사례 공개

컴퓨팅입력 :2019/01/24 13:11    수정: 2019/01/24 13:11

마이크로소프트(MS)와 구글이 윈도 소프트웨어(SW) 설치파일과 자바 런타임 배포파일 형식을 악용한 공격 위협에 함께 대응한 흥미로운 사례가 공개됐다. 구글 지주회사 '알파벳' 계열 신생 사이버보안업체인 크로니클 측에서 밝힌 내용이다.

크로니클의 맬웨어인텔리전스 서비스 부문인 '바이러스토털(VirusTotal)' 공식블로그에 올초 게재된 내용에 따르면 이들은 작년말 새로운 보안위협 방지를 위해 MS와 협력했다. [원문보기 ☞ Distribution of malicious JAR appended to MSI files signed by third parties]

윈도10 최신버전에서도 확인된 MSI 코드서명 검증기능 허점을 이용하면 공격자가 보안솔루션 탐지를 회피해 JAR 패키지 파일로 악성코드를 유포해 직접 일반 이용자를 감염시킬 수 있는 문제를 설명한 바이러스토털 공식블로그 포스팅.

새로운 위협은 근본적으로 MS의 윈도 운영체제(OS)에서 윈도인스톨러(Windows Installer) 포맷, 즉 윈도 프로그램 설치파일 확장자(.msi)를 쓰는 파일의 처리동작이 악용될 때 발생할 수 있다.

msi 포맷에 담긴 내용은 파일 끝에 덧붙는 SW개발자의 전자서명을 통해 무결성 검증을 받는다. MS는 이를 위해 '오센티코드(Authenticode)'라는 전자서명 포맷을 지원하고 있다. MS 윈도 OS가 서명된 파일을 믿을만한지 판정할 때 필요한 기술이다.

바이러스토털 창업자 베르나르도 킨테로는 "이 (오센티코드) 동작은 MS 윈도 코드서명(code signing)이 어떤 파일을 믿을지 결정할 때 의존하는 일부 보안솔루션을 공격자가 우회하려할 때 악용될 수 있다"고 지적했다.

그는 특히 msi 포맷에 첨부된 SW개발자의 코드서명이 악의적으로 만들어진 자바 패키지 파일 확장자(.jar)로 처리될 때 특히 위험하다고 강조했다. OS가 유효하다고 판정한 서명을 지닌 파일 속의 맬웨어가 자바 런타임 동작 특성에 따라 직접 실행될 수 있다는 이유에서다.

킨테로가 지적한 보안위협 시나리오는 최신버전인 윈도10 1809 업데이트 및 자바 SE 런타임환경 8 업데이트 191 환경에서도 유효한 것으로 확인됐다. MS는 현단계의 최신 윈도OS 환경에선 이 문제를 해결하지 않기로 결정한 상태다.

■ 윈도OS의 윈도인스톨러 파일 포맷 코드서명 무결성 검증절차에 허점 존재

코드서명은 실행파일이나 스크립트에 인증서 기반 전자서명을 사용하는 방법이다. 그 파일 작성자의 신원을 검증함으로써 해당 코드가 작성자 서명을 받은 이래로 위변조되지 않았음을 보장하는 수단이다.

킨테로는 "서명된 (.exe 확장자를 쓰는) 윈도PE 파일의 내용을 바꾸거나 어떤 데이터를 덧보태거나 하면 해당 서명은 윈도 OS에 그 파일이 유효하지 않다는 결과를 제시할 것으로 예상된다"며, 반면 msi 확장자를 쓰는 윈도인스톨러 파일에선 다르게 동작한다고 지적했다.

그에 따르면 서명된 msi 파일 끝에 어떤 데이터든 덧붙이더라도 윈도의 코드서명 검증절차는 파일을 통과시켜버린다. 그저 원래 전자서명이 유효하다고만 표시하며 다른 어떤 경고도 내지 않는다. 이 동작은 msi 파일에 악성코드를 숨겨 배포하는 데 악용될 수 있다.

기업이나 개인에서 사용하는, 다양한 보안솔루션이 윈도의 코드서명 검증 기능에 의존한다. 윈도의 검증상 문제는 이런 보안솔루션이 유명하고 믿을만한 SW개발자의 유효한 서명을 갖춘 파일에 설령 악성코드가 숨어 있어도 그걸 심층 조사하지 않고 간과하도록 방치한다.

윈도의 코드서명 검증 단계에 무시될 수 있는 msi 파일의 무결성 문제가 jar 파일과 결합되면 더 큰 위협으로 이어진다.

■ 윈도OS 자바애플리케이션 구동 위한 자바런타임환경의 jar 파일 처리방식

jar 파일은 자바 기반으로 개발된 애플리케이션을 효율적으로 배포하기 위해 만들어진 포맷이다. 그 내용은 자바 클래스와 관련 리소스를 포함한다. 이 파일을 실행하면 OS에 설치된 자바 런타임이 단일 요청(signle request)으로 전체 애플리케이션을 배포할 수 있다.

그런데 jar 파일에서 구성요소와 리소스를 저장하는 방식은 대중적인 압축 포맷인 zip 형식에 기반한다. 여기에 쓰이는 zip 포맷 유형은 파일 끝에 위치한 중앙 디렉토리 레코드(central directory record)의 끝부분에서 식별된다.

하필이면 jar 파일이 리소스를 파일 말미에 기록되는 중앙 디렉토리 레코드의 끝부분 내용으로 식별하는 이유는 자바 애플리케이션 패키지에 새로운 파일을 쉽게 추가할 수 있도록 허용하기 위해서다. jar 파일을 열면, 자바 런타임은 그 앞이 아니라 끝부분을 먼저 살핀다.

킨테로는 "따라서 jar 파일은 그 파일 시작지점에 있는 데이터와 독립적으로 실행되고, MS 윈도 시스템에선 자바런타임환경 설치 프로그램이 jar 파일을 기본 연결 대상으로 등록해, jar 파일을 더블클릭하면 자동으로 'javaw -jar' 명령을 실행한다"고 설명했다.

더블클릭된 jar 파일은 그 패키지 실행에 이어 자동으로 애플리케이션이 의존하는 확장기능을 함께 불러들인다. 이 기능은 윈도 OS에서 최종 사용자 런타임을 더 쉽게 사용할 수 있게 해준다.

■ 악의적인 jar 파일, 코드서명 검증 우회하는 msi 파일에 추가될 수 있다

하지만 이 이런 동작 특성때문에 공격자는 msi 파일에 악의적인 jar 파일을 담아 배포하는 시나리오를 시도할 수 있게 된다. MS나 구글이나 다른 유명한, 믿을만한 SW개발업체의 유효한 서명을 지닌 msi 파일이 실제로는 악성코드 배포수단이 될 수 있다는 얘기다.

킨테로는 "공격자는 믿을만한 SW개발자가 서명한 msi 파일에, 예를 들어 'copy /b signed.msi + malicious.jar signed_malicious.jar' 명령을 통해, 악의적 jar 파일을 추가하고 결과 파일 확장자를 jar로 바꿀 수 있다"며 "이 파일을 더블클릭하기만 하면 감염될 수 있다"고 경고했다.

이어 "이 공격 수법은 바이러스토털에 전달된 샘플을 통해 탐지됐고 '바이러스토털 모니터'라는 오탐 회피 서비스에 등재됐다"면서 "이 기법이 맬웨어 배포를 위해 광범위하게 사용됐다는 증거를 찾지는 못했다"고 밝혔다.

MS 측은 바이러스토털로부터 이런 문제를 제보받고 대응에 나섰다. 윈도 기반 시스템관리자용 툴을 제공하는 시스인터널스(Sysinternals) 웹사이트의 코드서명 검증도구 'Sigcheck'를 지난해 10월 2.70 버전으로 업데이트하면서다. [Sigcheck 배포 사이트 바로가기]

관련기사

업데이트된 Sigcheck 도구는 악성 jar 파일을 포함하고 윈도의 코드서명 검증기능을 우회할 수 있도록 만들어진 msi 파일을 접하면 "서명이 돼 있지만 파일크기가 유효하지 않음(파일 크기가 너무 큼)(Signed but the filesize is invalid (the file is too large))"이라고 경고한다.

킨테로는 "이 문제를 조사하기 위해 우리와 협력하고 이런 악의적 형태를 띤 파일을 탐지하도록 Sigcheck를 업데이트해 빨리 대응해 준 MS의 마크 루시노비치와 마크 쿡에게 감사를 표한다"며 "바이러스토털도 업데이트된 Signcheck를 통해 이 기법을 탐지한다"고 밝혔다.