취약한 도커 원격 API 서버 침투, ‘perfctl’ 맬웨어 배포
도커 컨테이너 생성, 권한 모드, 프로세스 ID ‘host’로 호스트 피벗
“도커 기본 설정, 컨테이너를 루트로 실행토록 하는건 금물”
“꼭 필요한 경우 아니면 도커 원격 API ‘비활성화’ 바람직”
[애플경제 전윤미 기자] 하나의 서비스가 침해당하더라도 원래의 서버에 영향을 미치기 어려운 격리된 컨테이너 구조가 도커(Docker)다. 그러나 최근엔 이같은 장점을 지닌 도커가 최근엔 해커들의 공격 대상이 되고 있어 주의가 필요하다. 최근 각종 사이버공격 사례에 의하면 도커의 원격 엑세스를 위한 API를 표적으로 삼는 공격이 늘어나고 있다.
이같은 수법은 일단 성공하기만 하면, 단일 컨테이너에서 호스트로 자리잡고 마구 맬웨어를 배포할 수 있기 때문이다. 이런 경우 보호되지 않은 도커의 원격 API 서버가 공격 통로가 된다. 이를 악용해 맬웨어를 배포하곤 하는 사례가 최근 부쩍 늘어나, VM을 포함하여 한 대의 서버에 여러 개의 서비스를 구동하고 보안도 튼튼한 것으로 알려진 도커의 장점이 크게 희석되고 있다.
‘ping’으로 서버 접근 여부 먼저 타진
이에 국내외 업계에선 도커 보안에 비상이 걸렸다. 특히 21일 백신으로 유명한 ‘트렌드 마이크로’가 내놓은 보고서 또한 이런 경각심을 높이고 있다. 해당 문서는 여지껏 잘 알려지지 않았던 도커의 원격 API 서버를 표적으로 한 공격 수법이 소상하게 소개되어 관심을 끌었다. 특히 회사측은 공격자들이 ‘perfctl’ 맬웨어를 배포하는 것을 상세히 관찰, 그 수법을 자세히 설명하고 있다.
이에 따르면 공격자들은 서버에 네트워크 접근 여부를 확인하는 ‘ping’(Packet Internet Groper)을 보내 취약한 도커 원격 API 서버를 겨냥한다. 그런 다음 도커 컨테이너를 만들고 의도적으로 정상적인 컨테이너와 비슷한 이름을 지정하는 방법을 쓴다. 이때 컨테이너는 권한 모드에서 작동하도록 구성된다. 공격자는 프로세스 ID ‘host’를 활용, 호스트 시스템과 동일한 PID 네임스페이스를 공유할 수 있게된다. 네트워크를 장악하게 된 것이다.
트렌드 마이크로는 “컨테이너 내부에서 실행되는 프로세스는 호스트의 프로세스와 동일한 PID 네임스페이스를 공유하는 셈”이라며 “결국 컨테이너 호스트 시스템에서 실행되는 모든 프로세스가 마치 호스트에서 직접 실행되는 것처럼 조정할 수 있게 된다”고 설명했다. 즉, “모든 실행 중인 프로세스와 동일한 방식으로 보고 상호 작용할 수 있다.”는 것이다.
그런 다음 공격자는 ‘Docker Exec API’를 통해 ‘Base64’로 인코딩된 페이로드를 실행한다. 페이로드의 초기 목표는 ‘nsenter’ 명령을 사용, 즉 컨테이너 이스케이프로 컨테리너를 탈취하는 것이다. 마치 호스트 시스템에서 실행되는 것과 유사한 기능이다. “그렇게 페이로드가 디코딩된 후엔 중복 프로세스를 확인하고, 후속 공격을 위해 다양한 환경 변수를 구성하는 ‘bash’ 스크립트를 만든다”는 설명이다.
‘bash’ 스크립트 생성, 네트워크 헤집고 다녀
여기서 ‘bash’ 스크립트는 PHP 확장 프로그램이다. 즉, 위장한 악성 바이너리를 다운로드하여 파일 확장자 기반 탐지를 피하고, 그런 다음 프로세스를 종료하거나, 권한을 설정하고, PATH 환경 변수를 업데이트하며, 백그라운드에서 명령을 실행하는 등 다양한 작업을 할 수 있다. 그야말로 원격 액세스 API는 편리하지만 이처럼 공격자에게 컨테이너 네트워크를 통째로 내어줄 수도 있는 치명적 도구가 될 수도 있다. 더욱이 이렇게 심어진 맬웨어는 ‘systemd’나 ‘cron’ 수법으로 늘 활성 상태를 유지할 수 있도록 하는 강력한 힘을 갖고 있어 근절하기가 더욱 어렵다는 지적이다.
그래서 “Docker 원격 API 서버의 악용 수법은 이제 기업과 보안 전문가가 극도로 긴장하지 않으면 안될 중대한 수준에 도달했다”는 트렌드 마이크로의 경고다. 그래서 모든 조직의 도커 원격 API 서버를 보호하고, 무단 액세스나 의심스러운 활동을 정기적으로 모니터링하며, 보안 패치를 최신 상태로 유지하는 것이 필수적이란 당부다.
이를 예방하거나 피해를 최소화하려면 원격 액세스 API 활성화에 신중해야 한다는 지적이다. 본래 이는 도커 컨테이너를 쉽게 배포하기 위한 목적이지만, 그 활성화가 꼭 필요한 경우가 아니라면, 아예 이를 비활성화하는게 가장 안전한 방법이란 지적이다. 즉 “컨테이너 이스케이프를 통해 단일 도커 컨테이너에서 호스트로 피벗할 수 있었지만, 사용하지 않을 때 관리 API를 비활성화하면 취약성을 완전히 피할 수 있다”는 조언이다.
이에 따르면 또 회사에 원격 관리 API가 필요한 경우라도, 그게 만약 침해될 경우 공격자가 컨테이너 네트워크를 장악할 수 있는 치명적 도구임을 인식해야 한다. 특히 평소에 모든 관리 API가 매우 높은 수준의 액세스 권한을 갖는다는 점도 특징이다. 관리자가 원하는 대로 리소스를 생성하고 수정할 수 있으므로, 유효하고 강력한 자격 증명이 있는 사람만 관리 콘솔에 액세스할 수 있도록 해야 한다.
Docker 컨테이너 레지스트리 보안 중요
특히 도커 컨테이너 보안을 위해 애당초 도커 기본 설정이 컨테이너를 루트로 실행하도록 설정하지 않는게 바람직하다는 지적이다. “예를 들어 컨테이너형 응용 프로그램이 공격에 취약하고, 루트 사용자와 함께 실행 중인 경우 공격 영역을 확장하고 공격자가 권한 상승 효과를 얻게되기 때문”이란 트렌드 마이크로의 설명이다.
특히 도커 컨테이너의 레지스트리는 컨테이너를 강력한 플랫폼으로 만들기 위한 것이다. 해당 레지스트리를 사용하면 쉽고 빠르게 다운로드 할 수 있는 이미지의 중앙 저장소를 만들 수 있다. 그럴수로 “‘Docker Trusted Registry’와 같이 신뢰할 수 있는 레지스트리를 사용하지 않으면 많은 보안 위험이 따른다.”며 “이는 IT 인프라의 기존 방화벽 뒤에 설치되지만, 그럼에도 불구하고 레지스트리에서 업로드 내지나 다운로드하는 것을 삼가야 한다”고 권했다.
