Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Loki — 🧙‍♂️ 스크립트 잭킹에 취약한 Electron 애플리케이션을 위한 Node.js 명령 및 제어 | Kitploit
도구/GitHubGitHub/boku7/loki
Persistence MechanismsExploitationIDS/IPS EvasionShellcodePost-ExploitationCommand and ControlRed TeamingPayload Development
GitHubboku7/loki

Loki

🧙‍♂️ 스크립트 잭킹에 취약한 Electron 애플리케이션을 위한 Node.js 명령 및 제어

저장소 보기
1.4k2204개월 전Kitploit 검토 완료

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

🧙‍♂️ Loki 명령 및 제어

Loki는 취약한 Electron 앱을 스크립트 잭(script-jack)하도록 설계된 Node.js 기반 1단계 C2(명령 및 제어) 프레임워크입니다 MITRE ATT&CK T1218.015. 레드 팀 운영을 위해 개발된 Loki는 신뢰할 수 있는 서명된 Electron 앱을 악용하여 보안 소프트웨어를 우회하고 애플리케이션 제어를 우회할 수 있게 해줍니다.

스크립트 잭킹은 런타임에 로드되는 JavaScript 파일을 임의의 Node.js 코드로 수정하여 Electron 앱의 실행 흐름을 가로챕니다. 이 기술은 다음 용도로 활용될 수 있습니다:

  • Electron 앱 백도어
  • Electron 앱 할로우잉(Hollowing)
  • 다른 프로세스로 실행 연결

여러 도구가 이미 스크립트 잭킹을 활용해 다른 프로세스로 실행을 연결하는 방법을 다루고 있지만, Loki는 서명된 Electron 앱의 코드 서명을 무효화하지 않으면서 백도어링과 할로우잉을 지원하는 최초의 도구입니다.

Loki가 작동하는 방식에 대한 자세한 내용은 다음 블로그 게시물을 확인하세요:

  • Windows Defender Application Control을 Loki C2로 우회하기

🚀 기여자

이름기여
Bobby Cooke제작자 및 관리자
Dylan Tran제작자
Ellis Springe알파 테스터
Shawn Jones어셈블리 실행 코드
Trusted SecCOFFLoader 코드
Simon Exley영상 제작자
Clinton Elves영상 제작자
John Hammond영상 제작자

영상

John Hammond의 Loki C2로 Cursor AI를 백도어하는 영상을 확인하세요! 🎩

  • 영상에서 그는 새로운 취약한 Electron 앱을 발견하고, Loki C2로 백도어하며, 클라이언트 GUI를 설정하는 과정을 안내합니다. 또한 앱을 백그라운드에서 지속적으로 실행하는 두 가지 방법도 함께 고안했습니다 🪄 -- 최종 사용자 관점에서 Cursor는 정상적으로 실행됩니다! 🥷

Cursor AI를 백도어함

Simon Exley & Clinton Elves의 Loki C2 시작하기 영상도 확인하세요! 🧙‍♂️

Windows Defender Application Control을 Loki C2로 우회하기

기능 및 세부사항

  • Azure Storage Blob C2 채널
    • C2 스토리지 계정을 보호하는 SAS 토큰
  • AES 암호화 C2 메시지
  • 프록시 인식 에이전트
    • 에이전트, 셸코드 실행, 어셈블리 fork-n-run 방식 실행에 Chromium 렌더러 자식 프로세스를 사용합니다 -- Chromium의 프록시 인식 기능을 상속합니다.
  • 팀서버 없음(Teamserver-less)
    • 에이전트가 Teamserver에 메시지를 보내는 기존 C2와 달리 Teamserver가 없습니다
    • GUI 클라이언트와 에이전트 모두 동일한 데이터 저장소에 체크인합니다
  • 숨김 실행 -- 백그라운드에서 실행됩니다

명령

모든 에이전트 명령은 네이티브 Node.JS로 작성되어 추가 종속성이나 라이브러리 로드 이벤트가 필요하지 않습니다. 단, scexec 및 assembly 명령은 keytar.node와 assembly.node에 대한 라이브러리 로드를 수행합니다.

  • 모든 명령은 / 경로를 허용하며, 경로에 \는 작동하지 않습니다.

Set - 애플리케이션 제어 제외 경로에서 노드 로드

  • 노드 파일에 대한 라이브러리 로드를 차단하는 애플리케이션 제어 규칙이 있는 경우 set 명령을 사용하여 assembly.node 및 scexec.node의 로드 경로를 변경할 수 있습니다.
  • ls, cat, cp, mv를 사용하면 애플리케이션 제어 규칙을 열거하여 제외 대상인 쓰기 가능한 디렉터리를 발견할 수 있습니다.
  • 이를 통해 노드 파일을 제외 디렉터리에 넣고 set 명령으로 로드 경로를 제외 디렉터리로 변경하여 애플리케이션 제어를 우회할 수 있습니다.
  • 이 공격 벡터에 대한 자세한 내용은 Daniel Duggan (@_RastaMouse)의 CRTO2 과정을 참조하세요.
root@kitploit:~
[04-04-2025 8:50AM MST] advsim$ help set
Set the Node load paths for assembly node and scexec nodes
	set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
	set assembly_path C:/Users/user/AppData/ExcludedApp/assembly.node
[04-04-2025 8:51AM MST] advsim$ set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
SCEXEC Node Load Path Set to : C:/Users/user/AppData/ExcludedApp/scexec.node

에이전트 기능

에이전트 기능에 대한 자세한 내용은 여기를 클릭하세요

클라이언트 기능

클라이언트 기능에 대한 자세한 내용은 여기를 클릭하세요

🧙‍♂️ 일루전 배포

먼저 ASAR 보안 무결성 검사를 수행하지 않는 취약한 Electron 애플리케이션(예: Microsoft Teams)을 식별해야 합니다. 최신 애플리케이션에는 백도어링을 방지하는 무결성 검사가 있을 수 있습니다. 대상 앱의 이전 버전이 취약할 가능성이 더 높습니다.

  • 취약한 Electron 앱을 발견하기 위한 가이드

간단한 지침

Electron 앱을 백도어할 때는 에이전트를 컴파일할 필요가 없습니다. {ELECTRONAPP}/resources/app/의 내용을 Loki 에이전트 파일로 교체하기만 하면 됩니다.

상세 지침

1단계 : Azure Storage Blob 계정 생성 및 SAS 토큰 받기

  • Azure Portal을 통해 Azure Storage 계정 만들기
  • Azure CLI를 통해 Azure Storage 계정 만들기

2단계 : 난독화된 Loki 페이로드 생성

  • 이 저장소를 클론하고 cd로 이동합니다
  • Node.JS 설치
  • javascript-obfuscator 모듈 설치
root@kitploit:~
npm install --save-dev javascript-obfuscator
  • create_agent_payload.js 스크립트를 실행하여 스토리지 계정 정보로 Loki 페이로드를 생성합니다
root@kitploit:~
bobby$ node create_agent_payload.js 
[+] Provide Azure storage account information:
        - Enter Storage Account  : 7f7584ty218ba5dba778.blob.core.windows.net
        - Enter SAS Token        : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D

[+] Configuration:
        - Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
        - SAS Token       : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
        - Meta Container  : mllyi2zjmafjm

[+] Updated /Users/bobby/apr2/LokiC2/config.js with storage configuration. 
 - Enter into the Loki Client UI
        Loki Client > Configuration

[+] Modifying PE binaries to have new hashes...
        - Payload assembly.node hash : e9d126407264821d3c2d324da0e2d1bc13cbc53e7c56340fe12b07f69b707f02
        - Payload keytar.node   hash : 292c14ffebd6cae3df99d9fbee525e29a5a704f076b82207eb3e650de45b075d

[+] Payload ready!
         - Obfuscated payload in the ./app directory

3단계 : Electron 애플리케이션 백도어

  • 난독화된 Loki 페이로드는 ./app/에 출력됩니다
  • {ELECTRONAPP}/resources/ 디렉터리로 이동합니다
  • 모든 항목을 삭제합니다
  • Loki ./app/ 폴더를 {ELECTRONAPP}/resources/app/에 복사합니다
  • Electron PE 파일을 클릭하여 Loki가 작동하는지 확인합니다

4단계 : Loki 클라이언트 구성

  • Loki GUI 클라이언트를 실행합니다

  • 메뉴바에서 Loki Client > Configuration을 클릭하여 설정 창을 엽니다

  • 스토리지 계정 정보를 입력하고 Save를 클릭합니다

  • 이제 에이전트가 대시보드에 표시됩니다

  • 대시보드 테이블에서 에이전트를 클릭하여 에이전트 창을 엽니다

  • Loki가 제대로 작동하는지 테스트합니다

Electron 앱을 백도어하면서 실제 애플리케이션을 정상적으로 작동시키기

Loki를 사용하는 가장 간단한 방법은 {ELECTRONAPP}/resources/app/의 파일을 Loki 파일로 교체하는 것입니다. 이렇게 하면 앱이 할로우(hollow) 처리되어 정상적으로 작동하지 않게 됩니다 -- Loki가 그 기능을 대체합니다.

Electron 애플리케이션을 계속 실행하면서 백그라운드에서 Loki도 배포하려는 경우 희망은 아직 있습니다! John Hammond과 저는 실제 Electron 애플리케이션을 계속 실행하는 방법을 알아냈습니다. 이 저장소의 /loki/backdoor/init.js에 필요한 파일을 추가해 두었습니다.

현재 John Hammond가 취약하다고 발견한 Cursor에서 작동하도록 설정되어 있습니다.

이를 수행하려면 다음이 필요합니다:

  • Cursor 앱을 다운로드합니다
  • package.json을 제외한 모든 Loki 파일을 cursor/resources/app/에 붙여넣습니다
    • 실제 package.json을 교체하지 마세요
  • /loki/backdoor/init.js를 cursor/resources/app/에 복사합니다
  • cursor/resources/app/package.json의 내용을 다음과 같이 수정합니다:
    • "main":"init.js",로 설정
    • "type":"module", 삭제
    • "private":true, 삭제

작동 방식

  • 이러한 변경으로 Cursor.exe는 클릭/실행 시 init.js를 로드합니다
  • init.js는 package.json을 읽습니다
  • init.js는 "main":"init.js",을 "main":"main.js",로 변경합니다
    • main.js는 Loki입니다
  • init.js는 Loki를 가리키는 새 Cursor.exe를 생성하고 disown합니다
  • Loki는 백그라운드에서 실행됩니다
  • init.js는 package.json을 다시 읽습니다
  • init.js는 "main":"main.js",을 로 변경합니다

이렇게 하면 앱이 지속적으로 백도어된 상태로 정상 작동합니다. Cursor 앱이 종료되어도 Loki는 백그라운드에서 계속 실행됩니다.

향후 계획

향후 이 작업을 자동화하는 스크립트를 만들겠습니다.

OPSEC 권장 사항

  • OPSEC 권장 사항

컴파일 가이드

에이전트 및 클라이언트 빌드를 위한 컴파일 지침입니다. 이 지침은 Windows, Linux, macOS를 포함한 여러 플랫폼을 다룹니다. 클라이언트는 대상 플랫폼 및 아키텍처에서 컴파일하는 것이 좋습니다.

클라이언트

  • Windows
  • macOS
  • Linux

에이전트

Electron 애플리케이션을 백도어하는 경우 에이전트를 컴파일할 필요가 없습니다.

에이전트를 컴파일하여 운영에 사용하는 것은 권장하지 않습니다. 에이전트 컴파일 지침은 개발용입니다.

  • Windows
  • Linux
  • macOS

탐지 지침

  • 이 TTP에 대한 자세한 내용, 예제 및 정보는 MITRE가 제공하는 정보를 검토하세요:
    • MITRE ATT&CK T1218.015: Electron 애플리케이션
  • 비정상적인 디렉터리(예: ~/Downloads/Teams/Teams.exe)에서 Electron 앱 실행
  • Azure Storage Blob *.blob.core.windows.net으로 비콘(beacon)을 보내는 Electron 앱
  • 네트워크 트래픽에서 SAS 토큰 사용
  • netstat.exe 또는 whoami.exe와 같은 자식 프로세스를 생성하는 Electron 앱
  • Electron 프로세스에서 Loki JavaScript가 실행되면 Loki package.json의 이름과 동일한 디렉터리가 ~/AppData/Roaming/{NAME}에 생성됩니다.
  • 이 LOLBAS Teams 항목은 Electron 애플리케이션 백도어링 탐지를 다룹니다. 탐지 정보는 아래에 복사되었습니다.
  • IOC: %LOCALAPPDATA%\Microsoft\Teams\current\app 디렉터리 생성
  • IOC: %LOCALAPPDATA%\Microsoft\Teams\current\app.asar 파일이 Teams 설치 프로그램/업데이터가 아닌 다른 항목에 의해 생성/수정됨
  • Electron 앱에서 수립된 Loki C2를 탐지하는 SIGMA 규칙
  • C2 프레임워크를 로드하기 위한 Electron 앱 폴더 하이재킹(Teams, VS Code, RingCentral, Postman)을 탐지하는 SIGMA 규칙

참고 자료 || 감사의 말 || 공격적 Electron 연구

  • Dylan Tran (@d_tranman)
    • Loki 에이전트의 공동 제작자. 셸코드 및 어셈블리 실행용 node 모듈을 만들었습니다.
  • Valentina Palmiotti (@chompie1337), Ellis Springe (@knavesec), Ruben Boonen — 지속성을 위해 Electron 애플리케이션을 백도어링한 이전 내부 작업에 기여해 주셨습니다.
  • Ruben Boonen
    • Wild West Hackin’ Fest 발표 Statikk Shiv: 포스트 익스플로잇을 위한 Electron 애플리케이션 활용
  • Andrew Kisliakov
    • LOLbins로 사용되는 Microsoft Teams 및 기타 Electron 앱
  • Shawn Jones
    • Loki 어셈블리 실행을 위해 Dylan이 Shawn의 공개 InlineExecute-Assembly 코드를 포팅했습니다.
  • mr.d0x (@mrd0x) — Teams Electron 애플리케이션을 활용하여 임의의 Node.JS 코드를 실행하고 그 결과를 LOLBAS 프로젝트에 공개한 이전 작업에 기여해 주셨습니다.
  • Michael Taggart
    • quASAR 프로젝트, 명령 실행을 위해 Electron 애플리케이션을 수정하도록 설계된 도구
    • Quasar: Electron 앱 손상시키기
  • Raphael Mudge — 레드 팀에 깊이 빠져들도록 영감을 주고 이 도구의 공개를 지원해 주셨습니다.
    • The Security Conversation
  • Fletcher Davis
    • BSides : Electron 애플리케이션 남용
  • Pavel Tsakalidis
    • BEEMKA - Electron 익스플로잇 툴킷

라이선스

이 프로젝트는 Business Source License 1.1에 따라 라이선스가 부여됩니다. 비상업적 사용은 라이선스 조건에 따라 허용됩니다. 상업적 사용은 저자의 명시적 허가가 필요합니다. 2030년 4월 3일에 이 라이선스는 Apache 2.0으로 전환됩니다. 전체 내용은 LICENSE를 참조하세요.

도구 다운로드
명령설명
help도움말 표시. 사용법: help 또는 help scan
pwd현재 작업 디렉터리 출력
ls파일 및 디렉터리 목록
cat파일 내용 표시
env프로세스 환경 변수 표시
spawn자식 프로세스 생성
drives드라이브 목록
mv파일을 새 대상으로 이동
sleep지터(jitter)와 함께 초 단위로 대기
cp원본 파일을 대상으로 복사
exit-all에이전트 종료, 에이전트는 더 이상 콜백하지 않음
load디스크에서 프로세스로 node PE 파일 로드
scexec셸코드 실행
assembly.NET 어셈블리 실행 및 명령 출력 가져오기
upload로컬 운영자 박스에서 원격 에이전트 박스로 파일 업로드
download원격 에이전트 박스에서 로컬 운영자 박스로 파일 다운로드
scan선택한 포트로 CIDR 범위에 대해 TCP 네트워크 스캔 수행
dnsDNS 조회. 시스템 DNS 구성 활용
setassembly node 및 scexec node의 Node 로드 경로 설정
bofCOFF 파일 실행 및 출력 반환
"main":"./out/main.js",
  • ./out/main.js"은 실제 Cursor 애플리케이션입니다
  • init.js는 실제 Cursor를 가리키는 새 Cursor.exe를 생성하고 disown합니다
  • 실제 Cursor 앱이 실행되어 표시되고 정상적으로 작동합니다
  • 사용자가 Cursor를 종료하면:
    • init.js가 종료를 감지합니다
    • init.js는 세 번째로 package.json을 읽습니다
    • init.js는 "main":"./out/main.js",을 "main":"init.js",로 변경합니다