2016년 말 발견된 더티 카우(Dirty COW)는 리눅스 기반 시스템 전반에 영향을 미치는 컴퓨터 보안 취약점입니다. 놀라운 점은 이 커널 수준의 결함이 2007년부터 리눅스 커널에 존재해 왔지만, 2016년에야 비로소 발견되고 실제로 악용되었다는 사실입니다.
이 글에서는 더티 카우 취약점이 정확히 무엇인지, 어떤 시스템에 영향을 미치는지, 그리고 스스로를 보호하는 방법까지 차근차근 살펴보겠습니다.
더티 카우(Dirty COW) 취약점이란?
더티 카우는 권한 상승(privilege escalation) 유형의 익스플로잇으로, 리눅스 기반 시스템에서 루트(root) 사용자 권한을 획득하는 데 악용될 수 있습니다. 보안 전문가들은 이런 종류의 익스플로잇이 드물지 않다고 말하지만, 악용 난이도가 매우 낮다는 점과 무려 11년 넘게 방치되어 왔다는 사실은 상당히 우려스러운 부분입니다.
실제로 리누스 토발즈(Linus Torvalds)는 2007년에 이미 이 문제를 인지했지만 "이론적인 익스플로잇"에 불과하다고 판단해 무시했다고 인정한 바 있습니다.
더티 카우라는 이름은 커널 메모리 관리 시스템의 쓰기 시 복사(Copy-On-Write, COW) 메커니즘에서 유래했습니다. 악성 프로그램은 경쟁 상태(race condition)를 유도해 파일의 읽기 전용 매핑을 쓰기 가능한 매핑으로 바꿀 수 있습니다. 이를 통해 낮은 권한을 가진 사용자도 시스템 내에서 자신의 권한을 상승시킬 수 있습니다.
루트 권한을 획득한 악성 프로그램은 시스템에 대한 제한 없는 접근 권한을 갖게 됩니다. 이후 시스템 파일 변조, 키로거 설치, 기기에 저장된 개인 데이터 접근 등 다양한 공격이 가능해집니다.
영향을 받는 시스템은?
더티 카우 취약점은 2007년 출시된 리눅스 커널 2.6.22 버전 이후의 모든 버전에 영향을 미칩니다. 위키백과에 따르면 이 취약점은 커널 4.8.3, 4.7.9, 4.4.26 및 그 이상 버전에서 패치되었습니다. 2016년에 처음 패치가 배포되었지만 문제를 완전히 해결하지 못했고, 결국 2017년 11월 후속 패치가 추가로 배포되었습니다.
현재 사용 중인 커널 버전을 확인하려면 리눅스 시스템에서 다음 명령어를 실행하세요:
uname -r우분투(Ubuntu), 데비안(Debian), 아치 리눅스(Arch Linux) 같은 주요 배포판은 모두 적절한 수정 사항을 배포했습니다. 아직 업데이트하지 않았다면 지금 바로 리눅스 커널을 최신 버전으로 올리세요.
대부분의 시스템이 패치되었으니 위험이 사라진 걸까요? 사실 그렇지 않습니다.
주류 시스템 대부분은 패치되었지만, 여전히 취약한 리눅스 기반 임베디드 기기가 많이 남아 있습니다. 이런 임베디드 기기, 특히 저가형 제품은 제조사로부터 업데이트를 아예 받지 못하는 경우가 대부분입니다. 안타깝게도 사용자가 이에 대해 할 수 있는 일은 많지 않습니다.
따라서 신뢰할 수 있는 사후 지원을 제공하는 업체에서 IoT(사물인터넷) 기기를 구매하는 것이 무엇보다 중요합니다.
또한 안드로이드는 리눅스 커널 기반이기 때문에 다수의 안드로이드 기기 역시 이 취약점의 영향을 받습니다.
더티 카우가 안드로이드 기기에 미치는 영향
ZNIU는 더티 카우 취약점을 활용한 최초의 안드로이드 악성코드입니다. 이 악성코드는 안드로이드 7.0 누가(Nougat)까지의 모든 안드로이드 기기를 루팅하는 데 악용될 수 있습니다. 취약점 자체는 모든 안드로이드 버전에 해당하지만, ZNIU는 특히 ARM/X86 64비트 아키텍처를 사용하는 기기를 공격합니다.
트렌드 마이크로(Trend Micro)의 보고서에 따르면, 2017년 9월 기준 ZNIU를 탑재한 악성 앱이 30만 건 이상 실제 환경에서 발견되었습니다. 중국, 인도, 일본 등 50개국 사용자가 피해를 입었으며, 대부분의 앱은 성인용 앱이나 게임으로 위장하고 있었습니다.
ZNIU 안드로이드 악성코드의 작동 방식
ZNIU에 감염된 앱은 주로 성인용 앱 형태로 악성 웹사이트에 등장하며, 사용자가 속아 다운로드하도록 유도합니다. 안드로이드는 외부 앱 설치(사이드로딩)가 비교적 쉬운 편이라 초보 사용자들이 이 함정에 빠지기 쉽습니다.
감염된 앱이 실행되면 먼저 명령 제어(C&C) 서버와 통신합니다. 이후 더티 카우 취약점을 악용해 스스로 슈퍼유저(superuser) 권한을 부여받습니다. 이 취약점은 원격으로 직접 악용할 수는 없지만, 악성 앱은 백도어를 심어 추후 원격 제어 공격을 준비할 수 있습니다.
루트 권한을 확보한 앱은 통신사 정보를 수집해 공격자의 서버로 전송합니다. 그다음 SMS 기반 결제 서비스를 통해 통신사와 거래를 진행하고, 통신사 결제 수단으로 금전을 빼돌립니다. 트렌드 마이크로 연구진에 따르면 이 결제금은 중국에 소재한 유령 회사로 흘러들어간다고 합니다.
표적이 중국 외부에 있다면 통신사를 통한 소액 거래 자체는 불가능하지만, 악성 앱은 여전히 백도어를 심어 다른 악성 앱을 설치할 수 있습니다.
흥미로운 점은 이 악성코드가 발각되지 않기 위해 월 약 3달러 수준의 소액 거래만 진행한다는 것입니다. 거래가 끝나면 관련 메시지를 모두 삭제해 탐지를 더욱 어렵게 만드는 지능적인 방식도 사용합니다.
ZNIU로부터 스스로를 보호하는 방법
구글은 문제를 신속히 인식해 2016년 12월 패치를 배포했습니다. 다만 이 패치는 안드로이드 4.4 킷캣(KitKat) 이상을 실행하는 기기에만 적용됩니다.
2018년 1월 기준 약 6%의 기기가 여전히 4.4 킷캣 미만의 안드로이드 버전을 사용 중입니다. 비율이 크지 않아 보일 수 있지만, 그만큼 많은 사람이 여전히 위험에 노출되어 있습니다.
기기가 안드로이드 4.4 킷캣 이상이라면 최신 보안 패치가 설치되어 있는지 확인하세요. 설정 > 휴대전화 정보로 이동한 뒤 맨 아래로 스크롤하여 'Android 보안 패치 수준'을 확인하면 됩니다.
설치된 보안 패치가 2016년 12월 이후 버전이라면 이 취약점으로부터 보호받고 있는 것입니다.
구글은 또한 구글 플레이 프로텍트(Google Play Protect)가 감염된 앱을 검사해 보안을 지키는 데 도움을 준다고 밝혔습니다. 단, 플레이 프로텍트가 정상적으로 작동하려면 기기가 구글 앱 호환 인증을 받아야 합니다. 제조사는 호환성 테스트를 통과해야만 구글 플레이 프로텍트 같은 구글 앱을 탑재할 수 있습니다. 다행히 대부분의 주요 제조사는 구글 인증을 받았으므로, 정품이 아닌 저가 복제 안드로이드 기기를 구매하지 않았다면 크게 걱정할 필요는 없습니다.
안드로이드 백신 앱은 이런 상승 권한 공격을 탐지할 수는 있지만 막을 수는 없습니다. 백신 앱은 도난 방지 같은 다른 기능에서는 유용할 수 있지만, 이 사례에서는 큰 도움이 되지 않습니다.
마지막 예방책으로, 출처를 알 수 없는 앱을 설치할 때는 항상 신중해야 합니다. 안드로이드 8.0 오레오(Oreo)는 출처 불명 앱 설치를 조금 더 안전하게 개선했지만, 그래도 주의를 게을리해서는 안 됩니다.
안전하게 지키기: 핵심 요약
더티 카우 취약점이 수많은 시스템에 영향을 미친다는 것은 주지의 사실입니다. 다행히 기업들이 신속하게 대응해 피해를 최소화했습니다. 우분투, 데비안, 아치 리눅스 등 대부분의 리눅스 기반 시스템은 패치되었고, 구글은 안드로이드에서 감염된 앱을 검사하기 위해 플레이 프로텍트를 배포했습니다.
안타깝게도 취약한 리눅스 커널을 탑재한 임베디드 시스템 사용자 상당수는 보안 업데이트를 영영 받지 못할 가능성이 높아 계속 위험에 노출되어 있습니다. 저가 복제 안드로이드 기기를 판매하는 제조사는 구글 인증을 받지 않았기 때문에, 그 구매자들 역시 위험에 처합니다. 이런 기기는 보안 업데이트는커녕 안드로이드 버전 업데이트조차 받을 수 없습니다.
따라서 이런 제조사의 기기 구매는 피하는 것이 매우 중요합니다. 이미 하나를 가지고 있다면 이제 교체를 고려할 때입니다. 가격 부담 없이 안전하게 쓸 수 있는 가성비 좋은 안드로이드 폰을 선택하는 것이 현명한 방법입니다. 나머지 사용자들은 업데이트를 즉시 설치하고, 기본적인 보안 상식을 활용해 온라인에서 스스로를 지켜야 합니다.
여러분의 리눅스 시스템은 더티 카우 취약점이나 ZNIU 악성코드의 영향을 받은 적이 있나요? 보안 업데이트를 즉시 설치하시나요? 아래 댓글로 의견을 공유해 주세요.