1. 개요

- 스타링크(Starlink)를 탑재한 스바루 차량들에서 심각한 보안 취약점 발견 [1]
- 공격에 성공하면 미국, 캐나다, 일본에 있는 모든 스바루 차량과 고객 계정에 무제한 접근이 가능
- 이메일 주소, 전화번호, 차량번호판 중 하나만 알아도 최소 네 가지 공격을 진행할 수 있음

※ 현재는 보안 패치가 적용된 상태

2. 주요 내용

- 사용자가 차량에 명령을 보낼 수 있는 MySubaru 모바일 앱을 분석
> 프록시 처리한 후 명령을 가로채고 승인 없이 차량의 잠금을 해제할 수 있는지 찾기 위함
> 그러나, 앱의 보안 상태와 인증 시스템 모두 보안이 정상적으로 작동

 

2.1 portal.prod.subarucs.com

- 일반적으로 자동차 제조사들은 고객용 앱보다 더 광범위한 권한을 가진 직원용 앱이 있으며, subarucs.com이 이에 해당함
- 도메인에 대한 스캔을 실행한 결과 하위 도메인 hxxps://portal.prod.subarucs.com/login.html을 발견
> 해당 도메인에는 ‘스타링크 관리자 포털’(STARLINK Admin Portal)'이라는 이름이 붙어 있었음
> 구글링 결과 STARLINK는 스바루 차량 내 인포테인먼트 시스템의 이름으로 차량의 모든 원격 제어 기능을 담당

※ 인포테인먼트 (Infotainment) : 정보(Information)와 오락(Entertainment)의 합성어로, 정보 전달에 오락성을 가미한 소프트웨어를 지칭하는 용어

[사진 1] portal.prod.subarucs.com

2.2 /assets/_js/

- 해당 페이지의 소스를 확인해 아래 부분을 확인

> "/assets/_js/" 폴더 아래에 몇 가지 흥미로운 JavaScript 파일이 있었기 때문에, 다른 JavaScript 파일을 찾기 위해 디렉토리를 무차별 대입

[사진 2] /assets/_js/

2.3 login.js

- FFuF를 실행한 후 흥미로운 코드가 있는 login.js 파일을 확인
확인 토큰 없이 직원의 계정을 재설정할 수 있는 "ResetPassword.json" 엔드포인트가 있는 것으로 확인

[사진 3] ResetPassword.json

2.4 /forgotPassword/resetPassword.json

- 임의의 계정 정보를 포함한 POST 요청을 전송

[사진 4] 임의의 계정 정보 전송 및 실패

유효한 계정 정보를 사용해 테스트한 결과 비밀번호를 정상적으로 변경할 수 있었음

[사진 5] 유효한 계정 정보 전송및 성공

2.5 2FA 우회

- 변경한 계정 정보를 통해 로그인을 시도한 결과 2FA 인증이 필요

[사진 6] 2FA 요구

UI에서 클라이언트 측 오버레이를 제거하는 간단한 방법으로 2FA 인증을 우회할 수 있었음

> 또한 모든 버튼이 정상적으로 작동

[사진 7] 오버레이 제거
[사진 8] 2FA 우회

2.6 차량 해킹

- 지인의 차량 번호판을 통해 관리자 패널에서 접근 권한을 부여
> 계정이 성공적으로 생성되었음을 확인할 수 있는 이메일을 수신
> 생성된 계정으로 지인 차량의 잠금을 원격에서 해제할 수 있었음

[사진 9] 계정 정상 추가

[영상 1] 공격 시연 [3]

3. 참고

[1] https://samcurry.net/hacking-subaru#finding-the-subaru-admin-panel
[2] https://github.com/ffuf/ffuf
[3] https://www.youtube.com/watch?v=0i8juy6RPBI
[4] https://www.boannews.com/media/view.asp?idx=135796

1. Protected View

[사진 1] Protected View

- MS Office의 기능으로, 사용자 PC의 안전을 위해 외부 콘텐츠를 차단하는 기능 [1]

> 안전하지 않은 출처에서 가져온 파일을 읽기 전용 또는 제한된 보기로 실행

> Outlook의 경우 의심되는 하이퍼링크 등이 포함된 경우 [사진 1]과 같은 경고창을 띄움

> 사용자가 "편집 사용" 등의 버튼을 클릭해 제한된 보기를 해제하고 문서를 편집할 수 있음

2. 주요내용

[사진 2] CVE-2024-21413 [2]

- MS Outlook에서 발생하는 원격 명령 실행 취약점 (CVSS : 9.8)

> 취약점 발견 당시 Zero-Day 취약점이었으나, 현재는 보안 패치가 발표된 상태

> CISA는 해당 취약점이 현재 실제 공격에 악용되고 있음을 경고하며 패치 적용을 권고

영향받는 버전
- Microsoft Office 2016 (32-bit editions, 64-bit editions)
- Microsoft Office 2019 (32-bit editions, 64-bit editions)
- Microsoft Office LTSC 2021 (32-bit editions, 64-bit editions)
- Microsoft 365 Apps for Enterprise (32-bit editions, 64-bit editions)


- Outlook에서는 하이퍼링크를 사용하여 파일을 첨부할 수 있음

> 하이퍼링크의 file:// 구문(Ex. file://///Server IP/example.rtf)을 사용하여 Moniker를 악용함으로써 특정 개체를 직접 로드하도록 유도

> Outlook에서 하이퍼링크를 통해 파일에 엑세스를 시도하면 해당 동작을 차단하고 오류 메세지를 띄움

[사진 3] file://///Server IP/example.rtf에 대한 Protected View 오류 메세지

- Moniker Links에 "!"를 추가하게 되면, Single Moniker에서 Composite Moniker로 변경되어 처리

> 이때, 메일 내 링크를 처리하는 과정에서 입력 값 검증이 제대로 이루어지지 않아 취약점이 발생

> Ex. file://///Server IP/example.rtf!Additionaltext

① Moniker 링크 구문 분석

> Outlook이 링크를 만나면 MkParseDisplayName( ) 호출

> Composite Moniker를 FileMoniker 및 ItemMoniker로 구문 분석

※ FileMoniker : //Server IP/example.rtf

※ ItemMoniker : Additionaltext

② COM 객체 조회

> 구문 분석된 요소는 해당 COM 객체를 조회

> .rtf 파일의 COM 개체를 검색하여 지정된 추가 항목(Additionaltext)을 처리

③ 임의 코드 실행

> .rtf 파일을 열고 분석한 후의 동작은 Additionaltext 부분에 따라 달라짐

> 콘텐츠가 악의적으로 제작된 경우 임의의 코드가 실행될 가능성 존재

[사진 4] 과정 요약

- 취약점 시연 영상에서는 Impacket을 사용해 SMB 프로토콜을 통한 NTLM 자격증명 탈취

> Impacket : Python 기반의 네트워크 공격 및 침투 테스트 도구 모음으로, SMB, NTLM, Kerberos, LDAP 등 다양한 네트워크 프로토콜을 다룰 수 있는 라이브러리

> 공격자가 제어하는 서버에 위치한 파일에 엑세스 하기위해 SMB 프로토콜이 사용되며, 이때 NTLM 인증이 발생

[영상 1] 공격 시연 [3]

3. 대응방안

- 벤더사 제공 보안 업데이트 적용 [4]

영향받는 버전 해결 버전
Microsoft Office 2016 (32-bit editions, 64-bit editions) 버전 16.0.5435.1000 이상으로 업데이트
Microsoft Office 2019 (32-bit editions, 64-bit editions) 버전 19.0.0 이상으로 업데이트
Microsoft Office LTSC 2021 (32-bit editions, 64-bit editions) 버전 16.0.1 이상으로 업데이트
Microsoft 365 Apps for Enterprise (32-bit editions, 64-bit editions) 버전 16.0.1 이상으로 업데이트

4. 참고

[1] https://support.microsoft.com/ko-kr/office/%EC%A0%9C%ED%95%9C%EB%90%9C-%EB%B3%B4%EA%B8%B0%EC%9D%98-%EC%A0%95%EC%9D%98-d6f09ac7-e6b9-4495-8e43-2bbcdbcb6653
[2] https://nvd.nist.gov/vuln/detail/cve-2024-21413
[3] https://www.youtube.com/watch?v=rFjhBcUWXaY
[4] https://msrc.microsoft.com/update-guide/vulnerability/CVE-2024-21413
[5] https://www.vicarius.io/vsociety/posts/monikerlink-critical-vulnerability-in-ms-outlook-cve-2024-21413
[6] https://www.dailysecu.com/news/articleView.html?idxno=163568

1. 개요

- ChatGPT에 새로운 탈옥 기법인 시간 혼란을 악용한 Time-Bandit 취약점 발견
- 안전 장치를 우회해 무기 제작, 핵 정보, 악성코드 개발 등의 제공하도록 유도할 수 있음

2. 주요내용

- ChatGPT가 현재 시점이 언제인지 정확하게 인식하지 못하는 시간적 혼란에 상태에 빠질 수 있다는 사실이 발견 [1]

> ChatGPT가 특정 시점에 위치해 있다고 믿게 만든 후, 그 시점의 기술 수준과 현대의 정보 및 도구를 결합하도록 유도

> 이를 통해 ChatGPT로부터 악성코드 제작, 무기 제조 방법 등 민감 정보를 얻을 수 있었음

 

- 두 가지 취약점을 악용해 작동

> 다음 두 가지를 결합하여 ChatGPT를 과거 또는 미래에 있는 것처럼 시간적 맥락을 설정해 보호 장치를 우회할 수 있음

① 타임라인 혼란

> ChatGPT가 현재 시점을 정확하게 인식하지 못하도록 유도

> 시간에 대한 인식을 하지 못하고 과거, 현재, 미래 중 어느 시점에 있는지 판단할 수 없는 상태에 빠지게 됨

② 절차적 모호성

> 애매한 질문 구성

> ChatGPT의 보안 장치(규칙, 메커니즘 등)를 제대로 적용하지 못하도록

[사진 1] Time-Bandit 취약점으로 다형성 멀웨어 생성

3. 대응방안

- 현재 취약점은 완화된 상태

> 개인 : 탈옥 등 불법적으로 사용하지 않도록 AI 보안 교육 및 윤리적 사용 정책 강화 필요

> 기업 : AI 사용 가이드라인을 마련하고, 탈옥 시도를 모니터링할 수 있는 시스템 도입 필요

> 기타 : AI 탈옥 기법을 연구 및 분석해 새로운 탈옥 방식을 사전에 차단하는 과정이 필요

4. 참고

[1] https://www.kb.cert.org/vuls/id/733789
[2] https://www.bleepingcomputer.com/news/security/time-bandit-chatgpt-jailbreak-bypasses-safeguards-on-sensitive-topics/
[3] https://www.dailysecu.com/news/articleView.html?idxno=163339

본 게시글은 DeepSeek 논문과 구글링 결과 및 개인적인 생각를 정리한 글로, 정확하지 않을 수 있습니다.
혹여 잘못된 내용이 있다면, 알려주시면 감사하겠습니다.

1. 개요

- 중국 AI 스타트업이 개발한 오픈소스 기반의 LLM, DeepSeek
- GPT-4와 유사한 수준의 성능을 제공하면서도, 훨씬 적은 자원으로 훈련
- 주로 자연어 처리와 생성 AI 모델에 특화된 기술을 제공
- 기술 혁신과 AI 기조를 파괴하였으나, 보안과 관련된 주요 문제점이 대두

2. DeepSeek 주요 기술

- 기존 AI 서비스를 개발하고 배포 및 운영하는 데에는 많은 비용과 시간, 공간이 필요
> OpenAI, Anthropic 등의 기업들은 계산에만 1억 달러 이상을 소비
> 또한, 계산을 위한 수 천대의 GPU가 필요하며, 이를 위한 대규모 데이터 센터를 운용

 

- 그러나, DeepSeek은 GPT-4 개발 비용의 약 1/17 수준에 불과한 약 600달러로 개발

 

① FP8 Mixed Precision Training

- 일반적으로 신경망의 크기가 커질수록 성능이 향상되나, 메모리와 컴퓨팅에 대한 문제가 발생
혼합 정밀도 훈련 (Mixed Precision Training)은 모델의 정확도와 파라미터에 영향을 끼치지 않고, 메모리 요구사항을 줄이고 GPU 산출 속도를 높일 수 있는 신경망 훈련 방법
> 혼합 정밀도 훈련은 모델 학습 과정에서 부동 소수점(Floating-Point Numbers) 연산 정밀도를 혼합하여 사용하며, 주로 FP16, FP32를 혼합하여 사용함
숫자가 높을수록 모델의 정확도가 높아지나, 메모리를 많이 사용하는 단점을 지님

[사진 1] Floating Point Format

- DeepSeek에서는 FP8이라는 저비트 연산 체계를 도입하여 연산 효율성과 메모리 사용 효율을 극대화

[사진 2] FP8 Mixed Precision Training

* NVDIA 연구를 통해 FP8은 FP16 대비 2배 높은 성능을 제공하고, 2배 낮은 메모리 사용량을 가지는 것이 확인

[사진 3] FP16과 FP8의 정확도 비교

② DeepSeek MoE (Mixture of Experts)

- MoE (Mixture of Experts)게이팅 네트워크를 통해 각각의 입력에 가장 관련성이 높은 전문가 모델을 선택하는 방식으로 여러 전문가 모델 간에 작업을 분할

> 게이팅 네트워크 (Gating Network)란 입력 데이터에 따라 다른 전문가 (Expert) 모델을 동적으로 선택하는 역할을 하는 신경망

> 입력은 라우터를 사용해 적절한 각 전문가 모델로 전달되어 처리되며, 데이터를 효율적으로 처리할 수 있음
> 일반적으로 기존 MoE는 8~16개의 전문가를 두고 특정 토큰이 특정 전문가로 라우팅 되도록 하지만, 하나의 전문가가 다양한 토큰을 처리하게 됨
> 또한 서로 다른 전문가들이 같은 지식을 학습하는 지식 중복의 문제가 발생

 

- DeepSeek은 2 가지를 활용해 MoE의 성능을 개선

⒜ Fine-grained Expert Segmentation (세분화된 전문가 모델 분류)

 전문가를 더 작고, 더 집중된 기능을 하는 부분들로 세분화하여 하나의 전문가가 보다 세분화된 특정 영역의 지식을 집중적으로 학습하도록 유도

⒝ Shared Expert Isolation (공유 전문가의 분리)

- 여러 작업에 필요한 공통 지식을 처리할 수 있는 공유 전문가를 분리 및 항상 활성화시켜 공통 지식을 처리하도록 하여 지식 중복을 줄이고, 각 전문가들은 고유하고 특화된 영역에 집중할 수 있음

[사진 4] DeepSeek MoE

- 또한, 기존 MoE에서는 특정 전문가에게 토큰이 몰려 학습 및 추론에서 성능상 문제가 생기는 것을 방지 하기위해 Auxiliary Loss(부가 손실)를 추가로 도입해 로드 밸런싱
> 부가 손실을 추가하여 균형을 맞출 수 있으나, 각 모델의 성능을 저하시킬 위험이 있음

 

- DeepSeek MoE에서는 Aux-Loss-Free Strategy (부하 균형)를 활용해 이러한 문제를 해결
각 전문가마다 Bias를 두고 과부하/과소부하 상태를 모니터링해 해당 값을 감소/증가 시킴

[사진 5] Bias 계산

> 부하 균형이 개별 시퀀스 내에서 부하 불균형이 발생할 수 있어, 시퀀스 단위에서 부하 균형을 유지하기 위한 추가적인 보조 손실을 도입 (Complementary Sequence-Wise Auxiliary Loss, 보조 시퀀스 손실)
> 기존 MoE에서 특정 전문가에게 과부하가 걸리는 현상을 해결 하기위해 하나의 전문가가 담당하는 토큰 수를 제한하여 부하를 분산 (Node-Limited Routing, 노드 제한 라우팅)
> 기존 MoE에서 토큰을 균등하게 분배하지 못하는 경우 부하를 줄이기 위해 초과된 토큰을 Drop하는 방식을 사용하였으나, 정보 손실과 모델 품질을 하락 시키기 때문에, 모든 입력 토큰을 반드시 처리하도록 보장 (No Token-Dropping, 토큰 드롭 없음)

 

- MoE 모델의 효율성을 높이고, 성능 저하 없이 안정적인 추론이 가능하며, 기존 MoE 모델보다계산 자원을 효율적을 사용하고 높은 품질의 결과를 제공

 

③ Multi-Head Latent Attention (MLA)  

Attention : 입력 데이터의 중요한 부분에 가중치를 부여하여 모델이 더 집중할 수 있도록 하는 메커니즘으로, 어떤 정보가 더 중요한지를 학습하여 가중치를 동적으로 조절
Self-Attention : 주어진 입력 내의 각 단어나 토큰이 다른 단어와 얼마나 관련되어 있는지를 계산하는 메커니즘으로, 각 단어는 다른 모든 단어에 대한 가중치를 부여해 중요성과 문맥을 파악
Multi-Head Attention : 하나의 Self-Attention을 여러 헤드로 나누어 동시에 수행하는 방식으로, 모델이 입력 데이터를 여러 각도에서 분석할 수 있게 하여, 정보를 더 풍부하게 처리
> Query(Q : 현재 처리하고 있는 단어나 시퀀스 부분), Key(K : 비교 대상인 다른 단어나 시퀀스 부분), Value(V : 최종적으로 가중치를 적용 받는 단어나 시퀀스 부분) 행렬을 각각 생성
기존 Multi-Head Attention에서는 모든 헤드별로 Key, Value를 그대로 저장해 활용
> 따라서, 모델 규모가 커질수록 Key-Value Cache에 대한 메모리 사용량이 급증해 연산 속도를 저하시킴

 

- DeepSeek에서는 Multi-Head Latent Attention(MLA)를 도입하여 Key-Value 데이터를 압축해 더 적은 메모리로도 동일한 성능을 유지하도록 설계됨

[사진 6] MLA

④ Multi-Token Prediction (MTP)

Multi-Token Prediction (MTP)란 다음 여러 토큰을 순차적으로 예측하여 생성 속도를 향상시키고 학습 신호를 풍부하게 함
> t 시점에 t+1, t+2, t+3…을 예측하여 데이터에서 얻을 수 있는 신호가 더 촘촘해져 더 나은 정확도를 달성

[사진 7] MTP

⑤ 기타

각 토큰마다 활성화되는 파라미터를 370억 개로 제한하여 계산 효율성을 높이면서도, 높은 성능을 유지
- 학습을 통해 128,000자까지 문맥을 확장해 긴 문서나 대화를 자연스럽게 처리할 수 있도록 함

3. DeepSeek 보안 논쟁

① OpenSource 공급망 공격

- DeepSeek는 오픈소스로 배포되고 있기 때문에 공급망 공격의 대상이 될 가능성이 높음

> 개발의 효율성을 높이기 위해 오픈소스를 자주 활용하나, 오픈소스 소프트웨어는 공급망 공격에 취약
> 악성코드를 삽입하거나, 악성코드를 포함한 유사한 이름의 패키지를 업로드 하는 등의 방법으로 공격을 진행

사례 설명
XZ Utils 백도어 사건 - XZ Utils는 리눅스 시스템에서 널리 사용되는 오픈소스 압축 라이브러리
- 공격자는 프로젝트에 개발자로 참여하여 수 년간 신뢰를 쌓아 권한을 획득하고, 악성코드를 포함한 버전을 저장소에 커밋
PyPI 타이포스쿼팅 공격 - PyPI (Python Package Index)는 파이썬 패키지를 제공하는 오픈소스 패키지 저장소
- 공격자들은 인기 있는 라이브러리와 유사한 이름을 지닌 패키지를 배포하여 사용자가 실수, 오타 등으로 악성 패키지를 다운로드하도록 유도
event-stream 공격 사건 - 원 제작자에게 event-stream 프로젝트 관리를 대신해 주겠다고한 요청이 승인되어 관리를 시작한 공격자가 비트코인을 훔치는 악성 코드를 삽입해 배포
DeepSeek 사칭 악성 패키지 - 이미 PyPI에 DeepSeek의 인기에 편승해 이를 사칭한 악성 패키지를 유포하여 222명이 피해를 당한 사실이 확인
- DeepSeek 관련 개발 도구로 위장한 패키지를 업로드하였으며, 인포스틸러로 동작함

 

② 중국 소프트웨어 정보 탈취 문제 

- 중국에서 개발된 소프트웨어 및 하드웨어에서 정보 탈취, 백도어가 포함되어 있다는 의심과 실 사례 존재

사례 설명
육군 악성코드가 포함된
중국 CCTV 사용
- 육군이 해안과 강변 경계 강화를 위해 설치한 모든 CCTV 215대 에서 중국 서버에 정보를 전송하도록 설계된 악성코드가 발견
- 악성코드를 심은 후 납품한 것으로 확인되었으며, 백도어를 통해 악성코드를 유포하는 사이트로 연결
중국 소프트웨어 백도어 논란 - 다른 기업에 스파이를 파견하거나 기술을 훔쳐내는 등 부정한 방법으로 성장한 기업과 중국 정부의 연관성 대한 의심으로 논란이 시작
- 미국, 유럽, 일본, 호주 등 세계 각지에서 이동통신 네트워크에서 중국 소프트웨어의 사용을 금지하였으며 단계적으로 퇴출 시작
중국 정부의 데이터 접근 권한 논란 - 중국은 국가정보법을 통해 자국 기업이 보유한 데이터를 요청할 수 있는 권한을 지니므로, 관련 데이터가 중국 정부에 의해 활용될 가능성이 있음
중국 드론 제조업체의 
사용자 데이터 원격 서버 전송 문제
- 미국 국토안보부는 중국 드론을 사용할 때 각종 위치정보, 음성정보 등이 원격 서버로 전송된다는 의혹을 제기
중국 스파이칩 문제 - 중국에서 좁쌀 크기의 해킹용 칩을 제작 및 서버 기판에 내장하여 20개 업체에 판매된 후 보안 실사 과정에서 해킹 정황이 발견된 사건

 

③ 중국 소프트웨어 사용 금지 움직임

- 미국 FCC는 ‘국가 안보 위협 중국 통신장비 및 영상감시장비 승인 금지’를 발표해 통신장비, CCTV, IoT, 해저케이블 등에서 중국 기업의 장비와 서비스 사용을 금지하였으며, 기존에 설치한 장비와 서비스는 제거
- 미국, 유럽 등 여러 국가에서 틱톡이 사용자의 데이터를 중국으로 전송할 가능성이 있다는 점이 우려되어 틱톡 사용 금지 조치가 시행되거나 논의되고 있는 중
- 인도에서는 틱톡을 포함한 59개 중국 앱이 금지되었으며, 미국에서는 공무원 및 정부 기관에서 사용하는 기기에 틱톡 사용을 금지하는 법안이 통과

 

- 미국 의회, 해군, NASA, 펜타곤, 텍사스 주 정부 등도 딥시크 앱의 사용을 금지

- 호주, 이탈리아, 네덜란드, 대만, 한국 등 여러 국가에서도 정부 기기에서의 앱 사용을 금지하는 조치
> 국내에서는 환경부, 보건복지부, 여성가족부, 경찰청 등의 정부 부처와 현대차, 기아, 모비스 등의 기업에서 DeepSeek를 접속할 수 없도록 차단

 

④ DeepSeek 자체 보안 문제

- DeepSeek 자체적으로도 보안 문제가 보고된 사례가 있음

구분 설명
서비스 관련 - 사이버 공격으로 신규 가입이 불가했었던 시점이 존재
- 민감한 질문에(정치, 역사 등) 언어별로 다르게 답변
광범위한 개인정보 수집과 수집된 데이터가 중국 서버에 저장
> 광고주 등과 제한 없는 사용자 정보공유
> 사용자의 모든 정보가 학습데이터로 유입 및 활용
> 중국의 국가정보법에 근거 중국 정부에 의해 사용될 수 있음
민감정보 외부 노출 - DeepSeek 데이터베이스가 외부에 공개되어 접근이 가능한 상태로 발견
> 데이터 열람만이 아니라 각종 제어 행위도 가능
> 100만 줄이 넘는 로그에 내부 테이터와 채팅 기록, 비밀 키 등 각종 민감 정보가 포함
민감정보 탈취 이용자 기기 정보와 키보드 입력 패턴 등을 수집해 중국 내 서버에 저장하는 것이 확인
iOS 앱은 민감한 사용자 및 기기 정보를 암호화 없이 인터넷으로 전송하는 것이 확인
> 중간자 공격, 스니핑 등 해킹 기법에 쉽게 노출
> 애플의 앱 전송 보안(App Transport Security, ATS) 기능을 비활성화한 상태로 운영
> 하드코딩된 암호화 키와 초기화 벡터(initialization vector)의 재사용
부정 사용 탈옥 방법이 공개
- DeepSeek-R1에 대한 안전성(Safety) 및 보안성(Security) 평가를 실시
> Jailbreaking(탈옥) 공격 성공률 63%
> 역할극(Role-Playing) 기반 공격 성공률 83%
> 허위 정보(Misinformation) 생성 위험도 89%
> JSON 기반의 구조화된 입력(Structure Converting)을 활용한 공격 성공률 82%
> 악성 코드 생성(Malware-gen) 요청 프롬프트 78% 성공률
> 사이버 보안(Cyber Security) 관련 취약성 54.6%
> 한국어 기반 공격에서 평균적으로 18% 더 높은 취약성

 

⑤ 기타

- 생성형 AI 서비스의 올바르지 못한 사용
> 개인정보, 민감정보 등이 포함된 파일을 업로드하여 사용하는 경우가 있음
> 생성형 AI 도구들의 입력 데이터를 분석한 결과 전체 입력 데이터 중 8.5%가 민감정보를 포함
> 탈옥으로 보안 조치를 우회해 악성코드, 피싱메일, 공격 툴 등을 생성해 악용

4. 시사점

① 경제성 측면

- DeepSeek의 가장 큰 장점은 경제적 효율성으로 기존 AI 모델 대비 저비용, 고효율 AI 훈련 및 운영이 가능

구분 설명
AI 모델 개발 비용 절감 - DeepSeek은 GPT-4 수준의 성능을 1/17 수준으로 구현
> AI 스타트업 및 중소기업들도 상대적으로 적은 예산으로 대형 AI 모델을 활용할 수 있는 기회를 제공
기업의 AI 도입 문턱을 낮춤 - 고성능 AI 모델을 자체적으로 개발할 여력이 없는 기업에 AI 개발 및 도입에 대한 진입 장벽을 낮춤
> 오픈소스로 제공되기 때문에, 자체적으로 DeepSeek을 커스터마이징하여 활용할 수 있음
AI 산업 경쟁 심화 - 소수 기업이 AI 모델 개발을 독점하는 구조에서 저비용 오픈소스 모델이 등장함에 따라 다양한 국가와 기업의 경쟁 심화

 

② 보안성 측면

- 경제적 효율성이 뛰어나지만, 보안 리스크가 존재하는 AI 모델로 도입 시 경제성과 보안성 간의 균형을 고려할 필요

구분 설명
개인 및 기업의 
대응 전략
개인 - AI 사용 시 민감한 데이터 입력 금지
- 신뢰할 수 있는 AI 도구 사용 검토
기업 - 내부 보안 검토 후 AI 도입 결정
- AI 모델 검증 프로세스 도입
- AI 사용 시 데이터 암호화 및 접근 통제 강화
정부 및 공공기관의 
대응 전략
정부 - 중국산 AI 모델의 보안성 평가 강화
- 공공기관 내 AI 모델 도입 시 엄격한 검증 절차 수립
- 자국산 AI 모델 개발 투자 확대
공공기관 - 외부 AI 도구 사용 시 보안 검토 필수
- 중요 정보가 포함된 데이터는 폐쇄망에서만 사용

 

1. Cacti [1]

네트워크 및 시스템 성능을 모니터링하는 오픈 소스 도구
> SNMP를 기반으로 네트워크 장비, 서버, 애플리케이션 등의 성능 데이터를 수집하고, RRDTool을 사용하여 그래프 형태로 시각화

※ SNMP (Simple Network Management Protocol) : 네트워크 장비(라우터, 스위치, 서버 등)의 상태 및 성능 데이터를 수집하는 프로토콜
※ RRDTool : 시간에 따라 변화하는 데이터를 저장하고 그래프로 시각화해주는 툴

2. CVE-2025-22604

[사진 1] CVE-2025-22604 [2]

- Cacti의 다중 라인 SNMP 결과 파서의 결함으로 인해 발생하는 원격 코드 실행 취약점 (CVSS : 9.1) [3]

> OID의 일부가 시스템 명령의 일부로 사용되는 배열의 키로 사용되어 취약점이 발생

OID (Object IDentifier) [4] - SNMP는 네트워크 장비의 정보(CPU 사용량, 메모리 사용량, 포트 Up/Down 상태 등)을 MIB(Management Infomation Base)에 저장해 정보를 주고받음
-  MIB 내에 포함되어 있는 각 개별 정보(Object)에 대한 ID를 OID라 함
-  즉, CPU 사용량, 메모리 사용량, 포트 상태 등 각 정보에 대해 구분할 수 있는 ID
영향받는 버전 : Cacti <= 1.2.8

 

ss_net_snmp_disk_io() 또는 ss_net_snmp_disk_bytes()로 처리될 때 각 OID의 일부가 시스템 명령의 일부로 사용되는 배열의 키로 사용되어 취약점이 발생
> cacti_snmp_walk()에서 exec_into_array()를 사용해 명령을 실행하고 여러 줄을 배열로 사용해 결과를 읽음
> 그 후, [사진 2]의 코드를 사용해 문자 = 를 기준으로 왼쪽 값을 OID에, 오른쪽 값을 Value에 저장
> Value의 경우 필터링을 적용하지만, OID 값은 필터링 없이 사용

[사진 2] OID와 Value 분할 코드

$i=0;
foreach($temp_array as $index => $value) { // $temp_array 배열 순회
	if(preg_match('/(.*=.*/',$value)) { // $value 값이 "키=값" 형식인 경우
		$parts=explode('=',$value,2); // = 문자를 기준으로 $value를 두 부분으로 분할
		$snmp_array[$i]['oid']=trim($parts[0]); // 공백을 제거한 후 값을 oid에 저장
		$snmp_array[$i]['value']=format_snmp_string($parts[1],false,$value_output_format); // 필터링 후 value에 저장
		$i++; // 다음 배열 인덱스로 이동
	} else { // 멀티라인 값 처리
		$snmp_array[$i-1]['value'].=$value;
	}
}

3. 해결방안

- 벤더사 제공 보안 업데이트 제공

제품명 영향받는 버전 해결 버전
Cacti <= 1.2.8 1.2.29

4. 참고

[1] https://www.cacti.net/
[2] https://nvd.nist.gov/vuln/detail/CVE-2025-22604
[3] https://github.com/Cacti/cacti/security/advisories/GHSA-c5j8-jxj3-hh36
[4] https://blog.naver.com/watch_all/221698867095
[5] https://thehackernews.com/2025/01/critical-cacti-security-flaw-cve-2025.html

1. IPany VPN [1]

- 한국 VPN 제공업체

2. 주요내용

PlushDaemon으로 명명된 중국 APT 그룹에의해 한국 VPN 공급 업체 IPany는 공급망 공격을 당함 [2]
> 공격자들은 합법적인 설치 프로그램에 SlowStepper 백도어를 삽입
> SlowStepper는 C++, Python, Go로 프로그래밍된 약 30개의 모듈로 구성된 대규모 툴킷을 갖추고 있음

 

- 사용자들은 VPN 다운로드 URL (hxxps://ipany[.]kr/download/IPanyVPNsetup.zip)에서 악성 파일을 다운
> 악성 IPanyVPNsetup.exe 설치 프로그램이 실행되면 여러 디렉토리를 생성하고, 정상 및 악성 파일을 모두 배포

[사진 1] 정상 및 악성 파일 배포

- 공격 체인

순서 설명
IPanyVPNSetup.exe 실행 - AutoMsg.dll 로드
- 레지스트리를 등록해 (값 : %PUBLIC%\Documents\WPSDocuments\WPSManager\svcghost.exe) 부팅 시 악성 구성 요소 svcghost.exe가 실행되도록 함
IPanyVPNSetup.exe가 
ExitProcess를 호출할 때
셸 코드로 실행 리다이렉션
- 셸 코드 : EncMgr.pkg를 메모리에 로드 및 실행

- EncMgr.pkg
> %PUBLIC%\Documents에 2개의 디렉터리를 생성 (WPSDocuments, WPSManager)하고 NetNative.pkg, FeatureFlag.pkg에서 구성 요소를 추출 및 실행
> 추출 및 실행 순서

⒜ NetNative.pkg에서 파일 추출
 - %PUBLIC%\Documents\WPSDocuments\WPSManager\assist.dll (악성 파일)
 - %PUBLIC%\Documents\WPSDocuments\WPSManager\msvcr100.dll (정상 파일)
 - %PUBLIC%\Documents\WPSDocuments\WPSManager\PerfWatson.exe (정상 파일)
 - %PUBLIC%\Documents\WPSDocuments\WPSManager\svcghost.exe (악성 파일)

⒝ NetNative.pkg 삭제

⒞ FeatureFlag.pkg를 winlogin.gif로 이동
> C:\ProgramData\Microsoft Shared\Filters\SystemInfo\winlogin.gif

⒟ assist.dll를 Winse.gif로 이동
> C:\ProgramData\Microsoft Shared\Filters\SystemInfo\Winse.gif

⒠ Winse.gif에서 lregdll.dll 추출
> %PUBLIC%\Documents\WPSDocuments\WPSManager\lregdll.dll

⒡ BootstrapCache.pkg를 Qmea.dat에 복사
> %PUBLIC%\Documents\WPSDocuments\WPSManager\Qmea.dat

⒢ ShellExecute API를 사용하여 svcghost.exe를 실행 및 종료
svcghost.exe - PerfWatson.exe 프로세스를 모니터링해 실행 중이 아니면 PerfWatson.exe를 실행해 lregdll.dll를 사이드 로드
- lregdll.dll는 winlogin.gif에서 SlowStepper 백도어 로드

[사진 2] 공격 체인 요약

2.1 SlowStepper 백도어

합법적인 DNS 서버를 사용해 7051.gsm.360safe[.]company에 대한 TXT 레코드를 획득
> 쿼리는 TXT 레코드의 처음 6바이트가 특정 문자열과 일치하는지 확인하고, 일치할 경우 나머지 문자열(C&C IP 주소를 포함하는 인코딩된 암호화문(base64, AES) 추출

※ TXT 레코드 : 도메인 및 하위 도메인과 관련된 텍스트 정보를 저장하며, 주로 메일이 신뢰할 수 있는 출처에서 온 것인지 확인하는데 사용 (SPF, DKIM, DMARC) [3]

[사진 3] 악성 도메인을 포함한 DNS TXT 레코드

획득한 C&C IP로 연결을 시도하며, 실패 시 API를 사용해 대체 C&C IP 획득
> 연결 실패 시 : st.360safe[.]company 도메인에 gethostbyname API를 사용해 해당 도메인에 매핑된 IP 주소를 얻어 대체 C&C 서버로 사용
> 통신이 설정되면 HOST 정보(CPU 정보, 호스트 이름, 실행 중인 프로세스 목록, 설치된 애플리케이션 목록 등), 파일 삭제, 셸 모드 활성화 등의 명령을 처리
> 또한 Python, C/C++, Go 언어로 작성된 모듈을 로드하고 실행하는 기능 포함

※ gethostbyname API : 주어진 도메인 이름을 이용하여 해당 도메인의 IP 주소를 알아내는 데 사용 [4]

 

- IoC 목록 [5]

3. 참고

[1] https://ipany.kr/
[2] https://www.welivesecurity.com/en/eset-research/plushdaemon-compromises-supply-chain-korean-vpn-service/
[3] https://hippogrammer.tistory.com/363
[4] https://learn.microsoft.com/ko-kr/windows/win32/api/winsock2/nf-winsock2-gethostbyname
[5] https://github.com/eset/malware-ioc/tree/master/PlushDaemon
[6] https://www.bleepingcomputer.com/news/security/ipany-vpn-breached-in-supply-chain-attack-to-push-custom-malware/

1. 개요

터널링 프로토콜의 보안 취약점이 발견돼 420만 개 이상의 인터넷에 연결된 호스트가 공격에 노출 [1][2]
> 터널링 프로토콜 : 두 네트워크 간에 데이터를 전송할 때, 데이터를 캡슐화하여 다른 네트워크 프로토콜의 데이터 패킷 안에 포함시켜 안전하고 효율적으로 전달할 수 있도록 해주는 네트워크 통신 프로토콜
- VPN 서버, 가정용 라우터, 인터넷 핵심 라우터, 모바일 네트워크 게이트웨이, 콘텐츠 전송 네트워크 노드 등 다양한 호스트가 공격에 취약
- 서비스 거부 공격부터 비인가 네트워크 접근까지 다양한 악성 활동을 가능하게 함

2. 주요내용

- IPIP/IP6IP6, GRE/GRE6, 4in6, 6in4 프로토콜에서 인증과 암호화를 지원하지 않아 외부에서 패킷을 변조 또는 악용할 수 있는 문제가 발견
> 스캐닝 (Standard tunnel, Subnet-spoofing, Spoofing, 6to4 & IPv4-mapped address, Tunneled ICMP Echo/Reply, Tunneled ICMP TTL Expired)을 통해 전체 IPv4 주소공간(37억개)과 1,000만 개의 IPv6 주소를 스캔

[사진 1] 스캔 방법 및 결과 요약

- 스캔 결과 약 430만 개의 취약한 호스트 중 약 190만 개의 호스트가 스푸핑이 가능한 것으로 확인

[사진 2] 터널링 프로토콜 별 취약한 호스트 및 스푸핑 가능한 호스트의 갯수

구분 설명
IPIP
(IP-in-IP)
IPv4 패킷을 또 다른 IPv4 패킷 안에 캡슐화하여 전송
- 구현이 간단하나 암호화와 인증을 제공하지 않음
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 IPv4 패킷 정보
IP6IP6
(IPv6-in-IPv6)
IPv6 패킷을 또 다른 IPv6 패킷 안에 캡슐화하여 전송
- IPv6 전용 네트워크 환경에서 최적화되어 있지만, IPv6 인프라가 필요
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 IPv6 패킷 정보
GRE
(Generic Routing Encapsulation)
IP 패킷뿐만 아니라 다양한 프로토콜을 캡슐화할 수 있음
- 다양한 프로토콜을 캡슐화할 수 있어 여러 목적으로 사용가능하나, 암호화 기능이 없음
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 패킷 정보
GRE6
(Generic Routing Encapsulation IPv6)
GRE의 IPv6 버전으로, IPv6 패킷을 캡슐화하거나 GRE 터널을 IPv6 네트워크 상에서 운용
- GRE의 다양성을 유지하면서, IPv6 환경에 최적화되어 있지만, 암호화 기능이 없음
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 패킷 정보
GUE
(Generic UDP Encapsulation) 
UDP 패킷 안에 다양한 프로토콜을 캡슐화하여 전송
- 다양한 프로토콜을 캡슐화 할 수 있으며, UDP를 사용해 단순하고 효율적이나 신뢰성이 부족
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 패킷 정보
4in6
(IPv4-in-IPv6)
IPv4 패킷을 IPv6 패킷에 캡슐화하여 전송하며, IPv6 네트워크를 통해 IPv4 트래픽을 전송할 수 있음
- IPv6 네트워크 상에서 IPv4 지원을 용이하게 할 수 있으나, 패킷 크기가 커져 MTU 문제가 발생할 수 있음
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 IPv4 패킷 정보
6in4
(IPv6-in-IPv4)
IPv6 패킷을 IPv4 패킷으로 캡슐화하여 전송하며, IPv4 네트워크를 통해 IPv6 트래픽을 전송할 수 있음
- IPv4 전용 네트워크에서 IPv6 지원을 용이하게 할 수 있으나, 터널 끝점이 고정되어 있어야 하며, 보안을 제공하지 않음
- 외부 헤더 : 터널링의 시작점(출발지)과 끝점(목적지) 정보 등
- 내부 헤더 : 원래 IPv6 패킷 정보

[사진 3] 터널링 프로토콜별 상위 3개 포트/도메인

공격자는 터널링 헤더를 조작해 접근 제어를 우회하고 서비스 거부 공격 등의 악성 행위를 수행할 수 있음
> 외부 헤더 : 출발지 공격자 IP, 목적지 취약한 호스트 IP
> 내부 헤더 : 출발지 취약한 호스트 IP, 목적지 공격 대상 IP
취약한 호스트가 외부 헤더 중 출발지 IP(=공격자 IP)를 제거하고, 내부 헤더를 확인해 목적지로 전달
내부 헤더의 출발지 IP가 신뢰할 수 있는 호스트 IP인 경우 네트워크 필터를 우회할 수 있음 

[사진 4] 공격 과정 요약

[영상 1] 공격 설명

- 4개의 CVE가 할당

취약점 영향 받는 프로토콜
CVE-2024-7595 [4] GRE 및 GRE6
CVE-2024-7596 [5] GUE
CVE-2025-23018 [6] IPv4-in-IPv6 및 IPv6-in-IPv6
CVE-2025-23019 [7] IPv6-in-IPv4

 

- 대응방안

> 인증 및 암호화 프로토콜(IPsec, WireGuard 등)을 사용해 터널링 트래픽 보호
> 라우터와 미들박스에 트래픽 필터링 구현
> 악의적인 터널링 패킷에 대한 심층 패킷 검사(DPI)
> 암호화되지 않은 터널링 패킷 모두 차단

3. 참고

[1] https://papers.mathyvanhoef.com/usenix2025-tunnels.pdf
[2] https://www.top10vpn.com/research/tunneling-protocol-vulnerability/
[3] https://www.youtube.com/watch?v=eFZsM3khrSk&t=157s
[4] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-7595
[5] https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-7596
[6] https://nvd.nist.gov/vuln/detail/CVE-2025-23018
[7] https://nvd.nist.gov/vuln/detail/CVE-2025-23019
[8] https://thehackernews.com/2025/01/unsecured-tunneling-protocols-expose-42.html
[9] https://www.dailysecu.com/news/articleView.html?idxno=163202

1. 대체 경로, 대체 채널

- 인증이나 정상적인 보안 메커니즘을 우회하는 공격 경로를 의미 (CWE-288) [1]

 

- 대체 경로(Alternate Path)
시스템이 정상적으로 인증을 요구하는 주요 경로(로그인 페이지 등)를 우회할 수 있는 비표준적인(≒비공식적인) 경로
> 디버깅용 또는 개발 테스트용 백도어가 남아있는 경우
> 사용자 입력 값(URL 매개변수)을 조작해 비인가된 데이터를 조회
> 잘못된 권한 검증으로 특정 파일 또는 디렉토리에 접근

> 대응 : 디버깅 및 테스트 코드 제거, 입력 값 검증, 숨겨진 디렉터리 접근 방지 등

 

- 대체 채널(Alternate Channel)
정상적인 인증 프로세스와 보안 채널(HTTPS 등)을 우회하여 비정상적인 통신 채널을 통해 시스템에 접근하거나 데이터를 전송하는 것
> HTTP 요청을 통해 정보 전송 및 평문 가로채기
> 레거시 프로토콜을 통해 암호화되지 않은 정보 가로채기
> 모바일 앱, IoT 기기에서 SSL/TLS 인증서 검증이 불완전해 중간자 공격으로 데이터 탈취

> 대응 : HTTPS 강제 적용, 레거시 프로토콜 비활성화, SSL/TLS 검증 강화, 네트워크 모니터링 및 로그 관리 등

2. CVE-2024-55591

[사진 1] CVE-2024-55591 [2]

- Fortinet 제품의 대체 경로 또는 대체 채널 문제로 인해 발생하는 인증 우회 취약점 (CVSS: 9.8)

> 공격자는 Node.js 웹소켓 모듈에 대한 조작된 요청을 통해 슈퍼 관리자 권한을 얻을 수 있음

※ 취약점 관련 상세 내용 확인 불가

영향받는 제품
- FortiOS 7.0 : 7.0.0 이상 ~ 7.0.16 이하
- FortiProxy : 7.2.0 이상 ~ 7.2.12 이하 / 7.0.0 이상 ~ 7.0.19 이하

 

- 관련 PoC [3]

> 총 5개의 조건을 충족할 경우 취약 (status_code_1_check, status_code_2_check, body_checks, header_marker_check, connection_upgrade_check)

구분 설명
status_code_1_check - 첫 번째 요청 및 응답으로 해당 페이지가 로그인 관련 페이지인지 확인

first_url = f"{base_url}/login?redir=/ng"
first_response = requests.get(first_url, verify=False, timeout=10)
<중략>
status_code_1_check = first_response.status_code == 200
status_code_2_check - 두 번째 요청 및 응답으로 WebSocket 업그레이드 가능 여부 확인

second_url = f"{base_url}/watchTowr-{random_suffix}"
second_headers = {
'Sec-WebSocket-Version': '13',
'Sec-WebSocket-Key': 'thFz/fKwzu5wDEy0XO3fcw==',
'Connection': 'keep-alive, Upgrade',
'Upgrade': 'websocket'
}
second_response = requests.get(second_url, headers=second_headers, verify=False, timeout=10)
<중략>
status_code_2_check = second_response.status_code == 101

※ 응답코드 101 : 클라이언트가 보낸 업그레이드 요청 헤더에 대한 응답으로, 서버가 클라이언트의 Upgrade 요청을 받아들여 프로토콜을 변경할 것임을 알림, 주로 WebSocket 프로토콜 전환 시 사용 [4]
body_checks - 첫 번째 응답에서 세 가지 값 (html_main_app_check,  f_icon_warning_check, f_icon_closing_check)의 만족 여부 확인

html_main_app_check = '<html class="main-app">' in first_response.text
f_icon_warning_check = '<f-icon class="fa-warning' in first_response.text
f_icon_closing_check = '</f-icon>' in first_response.text
<중략>
body_checks = html_main_app_check and f_icon_warning_check and f_icon_closing_check
header_marker_check - 첫 번째 응답에서 특정 헤더 (APSCOOKIE_)의 존재 여부 확인

header_marker_check = any('APSCOOKIE_' in str(header) for header in first_response.headers.values())
connection_upgrade_check - 두 번째 응답에서 Connection 헤더의 값 확인

connection_upgrade_check = 'Upgrade' in second_response.headers.get('Connection', '')
import requests
import random
from uuid import uuid4
from datetime import datetime, timedelta
import argparse

banner = """\
             __         ___  ___________                   
     __  _  ______ _/  |__ ____ |  |_\\__    ____\\____  _  ________ 
     \\ \\/ \\/ \\__  \\    ___/ ___\\|  |  \\\\|    | /  _ \\ \\/ \\/ \\_  __ \\
      \\     / / __ \\|  | \\  \\\\___|   Y  |    |(  <_> \\     / |  | \\\n       \\/\\_/ (____  |__|  \\\\\\\___  |___|__|__  | \\\\__  / \\\/\\_/  |__|   
                  \\\          \\\     \\\                              

        CVE-2024-55591.py
        (*) Fortinet FortiOS Authentication Bypass (CVE-2024-55591) vulnerable detection by watchTowr
        
          - Sonny , watchTowr (sonny@watchTowr.com)
          - Aliz Hammond, watchTowr (aliz@watchTowr.com)

        CVEs: [CVE-2024-55591]
"""

def generate_random_suffix(length=6):
    """Generate a random lowercase suffix."""
    return ''.join(random.choice('abcdefghijklmnopqrstuvwxyz') for _ in range(length))

def perform_web_interaction(target, port):
    """
    Perform a two-step web interaction with specific parameters.
    
    Args:
        target (str): Target IP address
        port (int): Target port
    
    Returns:
        tuple: Results of the two requests
    """
    # Construct base URL
    base_url = f"https://{target}:{port}"
    
    # Generate random suffix
    random_suffix = generate_random_suffix()
    
    # Disable SSL verification warnings
    requests.packages.urllib3.disable_warnings(requests.packages.urllib3.exceptions.InsecureRequestWarning)
    
    # First request - login-like endpoint
    first_url = f"{base_url}/login?redir=/ng"
    first_response = requests.get(first_url, verify=False, timeout=10)
    
    # Second request - endpoint with random suffix
    second_url = f"{base_url}/watchTowr-{random_suffix}"
    second_headers = {
        'Sec-WebSocket-Version': '13',
        'Sec-WebSocket-Key': 'thFz/fKwzu5wDEy0XO3fcw==',
        'Connection': 'keep-alive, Upgrade',
        'Upgrade': 'websocket'
    }
    second_response = requests.get(second_url, headers=second_headers, verify=False, timeout=10)
    
    return first_response, second_response

def validate_interaction_conditions(first_response, second_response):
    """
    Validate specific conditions for the web interaction.
    
    Args:
        first_response (requests.Response): First HTTP response
        second_response (requests.Response): Second HTTP response
    
    Returns:
        bool: Whether all conditions are met
    """
    try:
        # Check status codes
        status_code_1_check = first_response.status_code == 200
        status_code_2_check = second_response.status_code == 101
        
        # Check body contents for first response
        html_main_app_check = '<html class="main-app">' in first_response.text
        f_icon_warning_check = '<f-icon class="fa-warning' in first_response.text
        f_icon_closing_check = '</f-icon>' in first_response.text
        
        body_checks = html_main_app_check and f_icon_warning_check and f_icon_closing_check
        
        # Check for specific header marker
        header_marker_check = any('APSCOOKIE_' in str(header) for header in first_response.headers.values())
        
        # Check connection upgrade for second response
        connection_upgrade_check = 'Upgrade' in second_response.headers.get('Connection', '')
        
        # Print detailed information about first response matchers
        if not html_main_app_check:
            print("[!] Target is not a FortiOS Management Interface")
            exit()
        
        if not f_icon_warning_check:
            print("[!] '<f-icon class=\"fa-warning\"' not found in response")

        # Combine all checks
        return all([
            status_code_1_check,
            status_code_2_check,
            body_checks,
            header_marker_check,
            connection_upgrade_check
        ])
    except Exception as e:
        print(f"[!] Error during validation: {e}")
        return False

def main():
    """
    Main function to run the web interaction checks.
    """
    print(banner)

    parser = argparse.ArgumentParser(description='CVE-2024-55591 Detection Tool')
    parser.add_argument('--target', '-t', type=str, help='IP address of the target', required=True)
    parser.add_argument('--port', '-p', type=int, help='Port of the target', required=False, default=443)
    args = parser.parse_args()

    try:
        print(f"[*] Targeting: https://{args.target}:{args.port}")
        first_response, second_response = perform_web_interaction(args.target, args.port)
        
        result = validate_interaction_conditions(first_response, second_response)
        
        if result:
            print("[!] VULNERABLE: All conditions were met")
        else:
            print("[*] NOT VULNERABLE: Conditions were not satisfied")
        
    except requests.RequestException as e:
        print(f"[!] Request error: {e}")
    except Exception as e:
        print(f"[!] Unexpected error: {e}")

if __name__ == "__main__":
    main()

3. 대응방안

- 벤더사 제공 보안 업데이트 적용 [5]

제품명 영향받는 버전 해결 버전
FortiOS 7.0 7.0.0 이상 ~ 7.0.16 이하 7.0.17 이상
FortiProxy 7.2.0 이상 ~ 7.2.12 이하 7.2.13 이상
7.0.0 이상 ~ 7.0.19 이하 7.0.20 이상

 

> Fortinet 권고사항 [6]

구분 설명
로그 점검 - 랜덤 scrip 및 dstip가 포함된 로그인 활동 관련 로그:
type="event" subtype="system" level="information" vd="root" logdesc="Admin login successful" sn="1733486785" user="admin" ui="jsconsole" method="jsconsole" srcip=1.1.1.1 dstip=1.1.1.1 action="login" status="success" reason="none" profile="super_admin" msg="Administrator admin logged in successfully from jsconsole"

-  무작위로 생성된 것처럼 보이는 사용자 이름과 소스 IP가 포함된 관리자 생성 로그:
type="event" subtype="system" level="information" vd="root" logdesc="Object attribute configured" user="admin" ui="jsconsole(127.0.0.1)" action="Add" cfgtid=1411317760 cfgpath="system.admin" cfgobj="vOcep" cfgattr="password[*]accprofile[super_admin]vdom[root]" msg="Add system.admin vOcep"

-  로그에서 공격자들이 사용한 것으로 나타난 IP 주소:
1.1.1[.]1
127.0.0[.]1
2.2.2[.]2
8.8.8[.]8
8.8.4[.]4
위협행위자 수행 작업 점검 - 임의의 사용자 이름으로 장치에 관리자 계정 생성
- 임의의 사용자 이름으로 장치에 로컬 사용자 계정 생성
- 사용자 그룹 생성 또는 기존 sslvpn 사용자 그룹에 위의 로컬 사용자 추가
- 기타 설정(방화벽 정책, 방화벽 주소 등) 추가/변경
- 위에 추가된 로컬 사용자로 sslvpn에 로그인하여 내부 네트워크로 가는 터널 생성
공격 IP 점검 및 차단 -  45.55.158[.]47 [가장 많이 사용되는 IP 주소]
-  87.249.138[.]47
-  155.133.4[.]175
-  37.19.196[.]65
-  149.22.94[.]37
권고 - HTTP/HTTPS 관리 인터페이스 비활성화
- 로컬-인 정책을 통해 관리 인터페이스에 접근할 수 있는 IP 주소를 제한

4. 참고

[1] https://cwe.mitre.org/data/definitions/288.html
[2] https://nvd.nist.gov/vuln/detail/CVE-2024-55591
[3] https://github.com/watchtowrlabs/fortios-auth-bypass-check-CVE-2024-55591/tree/main?tab=readme-ov-file
[4] https://docs.whatap.io/url/url-http-status
[5] https://www.boho.or.kr/kr/bbs/view.do?searchCnd=&bbsId=B0000133&searchWrd=&menuNo=205020&pageIndex=1&categoryCode=&nttId=71632
[6] https://www.fortiguard.com/psirt/FG-IR-24-535
[7] https://arcticwolf.com/resources/blog/console-chaos-targets-fortinet-fortigate-firewalls/
[8] https://www.dailysecu.com/news/articleView.html?idxno=163036

+ Recent posts