# Fast16: Stuxnet보다 5년 앞선 고정밀 소프트웨어 사보타주

> Clean Markdown view of GeekNews topic #28955. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=28955](https://news.hada.io/topic?id=28955)
- GeekNews Markdown: [https://news.hada.io/topic/28955.md](https://news.hada.io/topic/28955.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-04-28T05:39:25+09:00
- Updated: 2026-04-28T05:39:25+09:00
- Original source: [sentinelone.com](https://www.sentinelone.com/labs/fast16-mystery-shadowbrokers-reference-reveals-high-precision-software-sabotage-5-years-before-stuxnet/)
- Points: 2
- Comments: 1

## Topic Body

- **2005년 제작된 미문서화 사보타주 프레임워크**로, 선택된 계산 소프트웨어의 메모리 코드를 패치해 **수치 결과를 왜곡**하도록 설계됨
- `svcmgmt.exe`는 겉으로는 서비스 래퍼처럼 보이지만 내부에 **Lua 5.0 가상 머신**과 암호화된 바이트코드, 보조 DLL, `fast16.sys` 드라이버를 담아 작업별 페이로드를 분리 실행함
- `fast16.sys`는 **부팅 시작 파일시스템 드라이버**로 매우 이른 단계에 로드된 뒤, Intel C/C++ 컴파일러로 빌드된 `.EXE`를 골라 커널 수준에서 메모리 패치를 수행함
- 패치 엔진은 **101개 규칙**으로 동작하며, 특히 FPU 명령 블록을 이용해 내부 배열 값 스케일링을 바꿔 토목공학, 물리학, 공정 시뮬레이션 같은 특수 계산 도구를 겨냥한 흔적을 남김
- ShadowBrokers 유출의 `fast16` 표식과 결합하면, **Stuxnet 이전 시기의 정밀 산업 사보타주**가 이미 임베디드 스크립팅, 협소 타기팅, 커널 패치를 결합한 형태로 존재했음이 드러남

---

### 개요와 식별 단서
- `fast16`은 **2005년 코어 컴포넌트**를 가진 미문서화 사이버 사보타주 프레임워크로, `fast16.sys`가 **고정밀 계산 소프트웨어**를 선택적으로 겨냥해 메모리에서 코드를 패치하고 계산 결과를 왜곡함
- `svcmgmt.exe`는 겉으로는 Windows 2000/XP 시기의 일반적 서비스 래퍼처럼 보이지만, 내부에 **Lua 5.0 가상 머신**과 서비스 엔트리 포인트가 해제하는 **암호화 바이트코드 컨테이너**를 담고 있음
- Lua 기반 악성코드 탐색 과정에서 바이트코드 매직 바이트 `1B 4C 75 61`, 버전 바이트, `LUA_PATH`, 특유의 C API가 단서가 됐고, 그 흐름에서 `svcmgmt.exe`가 식별됨
- `svcmgmt.exe` 내부의 `C:\buildy\driver\fd\i386\fast16.pdb` 문자열이 서비스 실행 파일과 커널 드라이버 프로젝트를 잇는 포렌식 단서가 됨
- 2017년 ShadowBrokers 유출의 `drv_list.txt`에도 같은 이름의 **`fast16`** 이 등장해 `svcmgmt.exe`의 PDB 문자열과 정밀 사보타주용 드라이버를 하나의 흐름으로 묶어 줌
- ShadowBrokers 측 회피 시그니처에는 `fast16 *** Nothing to see here – carry on***` 문구가 포함됨

### 캐리어 구조와 실행 방식
- `svcmgmt.exe`는 **명령행 인자**에 따라 동작을 바꾸는 적응형 캐리어로 설계됨
  - 인자 없음: Windows 서비스로 실행됨
  - `-p`: `InstallFlag = 1`로 설정하고 서비스로 실행됨
  - `-i`: `InstallFlag = 1`로 설정하고 Lua 코드를 실행함
  - `-r`: 설치 플래그 없이 Lua 코드를 실행함
  - 그 외 `&lt;filename&gt;`: 원래 명령과 `-r` 인자를 붙인 명령 두 개의 자식 프로세스를 생성하는 **Wrapper/Proxy 모드**로 동작함
- 내부 저장소에는 **암호화 Lua 바이트코드**, 보조 DLL, `fast16.sys` 드라이버가 함께 들어 있음
- Lua 환경은 기본 상태를 넘어 확장돼 있으며, `wstring` 모듈, 내장 대칭 암호 함수 `b`, Windows NT 파일시스템·레지스트리·서비스 제어·네트워크 API 바인딩 모듈을 제공함
- 외부 캐리어 바이너리는 비교적 안정적으로 유지하고, 작업별 페이로드는 암호화된 형태로 분리해 환경과 작전 목표에 맞게 재사용할 수 있게 만듦
- `svcmgmt.exe` 식별값은 다음과 같음
  - 파일명 `svcmgmt.exe`
  - 크기 `315,392 bytes`
  - MD5 `dbe51eabebf9d4ef9581ef99844a2944`
  - SHA1 `de584703c78a60a56028f9834086facd1401b355`
  - SHA256 `9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525`
  - 타입 `PE32 executable for MS Windows 4.00 (console), Intel i386`
  - 링크 타임 `2005-08-30 18:15:06 UTC`

### 웜릿 전파와 회피 구조
- `svcmgmt.exe`는 여러 **wormlet**을 실을 수 있는 클러스터 탄약형 캐리어처럼 동작하며, 확인된 샘플에는 하나의 **SCM wormlet**만 들어 있음
- 실행 흐름은 설정 준비, 와이드 문자열 변환, 권한 상승, `SvcMgmt` 서비스 설치·시작, 조건부 `fast16.sys` 배치, wormlet 방출, 초기 지연, 실패 임계값이나 외부 종료 조건까지의 반복 실행으로 이어짐
- SCM wormlet은 Windows 2000/XP 환경을 겨냥하며, **약하거나 기본 관리자 비밀번호**가 설정된 파일 공유를 이용해 네트워크 서버를 찾고 페이로드를 복사한 뒤 원격 서비스를 시작함
- 전파는 맞춤형 네트워크 프로토콜이 아니라 **서비스 제어 API**와 **파일 공유 API** 같은 표준 Windows 관리 기능에 기대어 이뤄짐
- 설치 전 `ok_to_install()`는 `ok_to_propagate()`를 호출해 환경을 점검하고, 수동 강제가 없으면 특정 보안 제품의 레지스트리 키 존재 여부로 전파 가능 여부를 결정함
- 아래 레지스트리 키 가운데 하나라도 있으면 설치를 중단해 모니터링 환경으로의 배포를 피함
  - `HKLM\SOFTWARE\Symantec\InstalledApps`
  - `HKLM\SOFTWARE\Sygate Technologies, Inc.\Sygate Personal Firewall`
  - `HKLM\SOFTWARE\TrendMicro\PFW`
  - `HKLM\SOFTWARE\Zone Labs\TrueVector`
  - `HKLM\SOFTWARE\F-Secure`
  - `HKLM\SOFTWARE\Network Ice\BlackIce`
  - `HKLM\SOFTWARE\McAfee.com\Personal Firewall`
  - `HKLM\SOFTWARE\ComputerAssociates\eTrust EZ Armor`
  - `HKLM\SOFTWARE\RedCannon\Fireball`
  - `HKLM\SOFTWARE\Kerio\Personal Firewall 4`
  - `HKLM\SOFTWARE\KasperskyLab\InstalledProducts\Kaspersky Anti-Hacker`
  - `HKLM\SOFTWARE\Tiny Software\Tiny Firewall`
  - `HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\Look n Stop 2.05p2`
  - `HKCU\SOFTWARE\Soft4Ever`
  - `HKLM\SOFTWARE\Norman Data Defense Systems`
  - `HKLM\SOFTWARE\Agnitum\Outpost Firewall`
  - `HKLM\SOFTWARE\Panda Software\Firewall`
  - `HKLM\SOFTWARE\InfoTeCS\TermiNET`
- `connotify.dll`은 최소한의 보고 채널 역할을 맡음
  - Windows `AddConnectNotify()` API로 등록돼 RAS 기반 새 네트워크 연결이 생길 때마다 호출됨
  - 난독화 문자열을 해독해 named pipe `\\.\pipe\p577`를 얻고, 로컬 파이프에 연결해 원격·로컬 연결 이름을 기록한 뒤 종료함
  - 독립 실행 모듈이 아니며 호스트 프로세스 등록이 필요함
  - 파일명 `svcmgmt.dll`
  - 크기 `45056 bytes`
  - MD5 `410eddfc19de44249897986ecc8ac449`
  - SHA1 `675cb83cec5f25ebbe8d9f90dea3d836fcb1c234`
  - SHA256 `8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9`
  - 링크 타임 `2005-06-06 18:42:45 UTC`
  - 타입 `PE32 DLL (i386, 4 sections)`

### 드라이버 구조와 메모리 패치 방식
- `fast16.sys`는 프레임워크에서 가장 강력한 컴포넌트로, **부팅 시작 파일시스템 드라이버**로 설정돼 디스크 드라이버와 함께 매우 이른 단계에 로드됨
- 설정은 `Start=0`, `Type=2`, `SCSI` 클래스 그룹이며, `NTFS`, `FAT`, `MRxSMB` 위에 자신을 삽입함
- 초기 진입 시 `Session Manager\PrefetchParameters` 아래 `EnablePrefetcher` 값을 **0**으로 설정해 이후 코드 페이지 요청이 전체 파일시스템 스택을 거치게 만듦
- 단순 XOR 문자열 암호와 `ntoskrnl.exe` 스캔으로 커널 API를 동적으로 해석하고, `\Device\fast16`, `\??\fast16`, 사용자 정의 `DeviceType` **0xA57C**를 노출함
- `IoRegisterFsRegistrationChange`로 활성 및 신규 파일시스템 장치 위에 worker device object를 붙이고, `IRP_MJ_CREATE`, `IRP_MJ_READ`, `IRP_MJ_CLOSE`, `IRP_MJ_QUERY_INFORMATION`, `IRP_MJ_FILE_SYSTEM_CONTROL`과 관련 Fast I/O 경로를 우회시킴
- 부팅 시점에 로드되지만 실제 **커널 레벨 코드 주입 엔진**은 `explorer.exe`가 열린 뒤에야 활성화됨
- 패치 대상은 두 조건을 동시에 만족해야 함
  - 파일명이 `.EXE`로 끝남
  - 마지막 PE 섹션 헤더 바로 뒤에 `Intel`로 시작하는 출력 가능한 ASCII 문자열이 있음
- 이 조건은 **Intel C/C++ 컴파일러**로 빌드된 실행 파일을 겨냥하며, 타깃 소프트웨어의 툴체인을 알고 있었음을 보여 줌
- 조건에 맞는 파일에는 메모리 내 PE 헤더 수정이 적용되며, `.xdata`, `.pdata` 두 섹션을 새로 주입하고 원래 코드 섹션 바이트를 채워 넣어 깨끗한 코드 사본을 유지함
- `fast16.sys` 식별값은 다음과 같음
  - 파일명 `fast16.sys`
  - 크기 `44,580 bytes`
  - MD5 `0ff6abe0252d4f37a196a1231fae5f26`
  - SHA1 `92e9dcaf7249110047ef121b7586c81d4b8cb4e5`
  - SHA256 `07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529`
  - 타입 `PE32 executable for MS Windows 5.00 (native), Intel i386, 5 sections`
  - 링크 타임 `2005-07-19 15:15:41 UTC`

### 규칙 기반 패치 엔진과 타깃 특성
- 패치 엔진은 **101개 규칙**으로 구성된 최소형 상태 기반 스캐너로, 파일이 디스크에서 읽힐 때 패턴 매칭과 치환 로직으로 실행 코드를 메모리에서 조용히 바꿈
- 성능 유지를 위해 256바이트 dispatch array로 일부 시작 바이트만 빠르게 거르고, 패턴 내부 wildcard를 허용하며, 일부 규칙은 상태 플래그를 설정·검사해 다단계 수정 시퀀스를 수행함
- 대부분의 패치 패턴은 x86 코드에서 실행 흐름을 탈취하거나 영향을 주는 일반적 명령 시퀀스에 대응하지만, 하나는 훨씬 큰 **FPU 명령 블록**으로 구성돼 있음
- 이 FPU 블록은 정밀 산술과 내부 배열 값 스케일링 전용 코드로, 일반적 악성 주입과는 다른 성격을 보임
- 연구진은 패치 규칙을 **YARA 시그니처**의 16진수 패턴으로 변환해 동시대 소프트웨어 코퍼스에 적용했고, 두 개 이상 패턴이 맞는 파일은 10개 미만으로 매우 적었음
- 적중한 파일들은 공통적으로 토목공학, 물리학, 물리 공정 시뮬레이션 같은 **특수 분야 계산 도구**였음
- FPU 패치는 세 개의 내부 배열에 전달된 값을 스케일링해 계산을 미세하게 바꾸며, 목표가 무단 접근이나 일반 전파가 아니라 **수치 결과 변조**에 있음을 보여 줌
- 정확한 타깃 바이너리와 워크로드를 모두 확인하지 못해 배열의 의미는 완전히 특정되지 않았음
- 별도 시스템에서 계산을 검증하면 이런 사보타주는 실패할 수 있지만, 같은 네트워크와 보안 환경을 공유하는 여러 시스템에 같은 드라이버가 배포되면 **독립 검산의 불일치 가능성**도 줄어듦
- 부록에는 패치 엔진의 일부 추출 패턴이 그대로 실려 있음
  - `48 89 84 24 9C 00 00 00 4B 0F 8F 79 FF FF FF 00`
  - `D8 E1 D9 5D FC D9 04 00`
  - `55 8B EC 83 EC 14 53 56 57 8B 3D ?? ?? ?? ?? 8B 0D 00`
  - `8D 1D ?? ?? ?? ?? 52 8D 05 ?? ?? ?? ?? 51 8D 15 ?? ?? ?? ?? 8D 0D ?? ?? ?? ?? 53 50 52 51 56 57 E8 ?? ?? ?? ?? 83 C4 38 EB 0E 83 EC 04 00`
  - `B9 01 00 00 00 C1 E7 02 8B BF ?? ?? ?? ?? 8B D7 85 FF 8B 55 30 8B 45 30 D8 C9 8B 75 2C 00 9A 8B 00 00 00 1B 00 90 0F 94 C3 0B D8 33 D2 83 3D 00`

### 패치 타깃 후보
- 패턴 매칭 결과가 가장 강하게 겹친 대상은 **LS-DYNA 970**, **PKPM**, **MOHID**였음
- [LS-DYNA 970](https://lsdyna.ansys.com/wp-content/uploads/2025/02/ls-dyna_970_manual_k.pdf)은 극한 조건에서 재료와 구조 거동을 분석하는 공학 시뮬레이션 소프트웨어로, 자동차 충돌, 폭발, 충격, 금속 성형, 제조 공정을 다루며 자동차, 항공우주, 국방·군사 연구, 제조·재료 과학에 쓰였음
  - 1976년부터 개발돼 왔음
  - MD5 `1d2f32c57ae2f2013f513d342925e972`
  - SHA1 `2fa28ef1c6744bdc2021abd4048eefc777dccf22`
  - SHA256 `5966513a12a5601b262c4ee4d3e32091feb05b666951d06431c30a8cece83010`
  - 파일 크기 `5,225,591 bytes`
  - 링크 타임 `2003-10-24 16:34:57 UTC`
  - 파일 타입 `PE32 executable for MS Windows 4.00 (console), Intel i386, 7 sections`
- PKPM은 중국에서 널리 쓰이는 **구조공학 CAD 제품군**으로, 건물 구조 설계 전 주기를 다루는 여러 실행 모듈로 구성됨
  - SATWE는 바닥, 보, 기둥, 벽, 프레임 전반의 3차원 구조 해석을 담당하는 핵심 엔진임
  - 콘크리트 전단 설계 모듈 식별값
    - MD5 `af4461a149bfd2ba566f2abefe7dcde4`
    - SHA1 `586edef41c3b3fba87bf0f0346c7e402f86fc11e`
    - SHA256 `09ca719e06a526f70aadf34fb66b136ed20f923776e6b33a33a9059ef674da22`
    - 파일 크기 `7716864 bytes`
    - 파일 타입 `PE32 executable for MS Windows 4.00 (GUI), Intel i386, 6 sections`
    - 링크 타임 `2011-08-26 10:58:17 UTC`
  - Building Structure CAD 모듈 식별값
    - MD5 `49a8934ccd34e2aaae6ea1e6a6313ffe`
    - SHA1 `3ce5b358c2ddd116ac9582efbb38354809999cb5`
    - SHA256 `8b018452fdd64c346af4d97da420681e2e0b55b8c9ce2b8de75e330993b759a0`
    - 크기 `11849728 bytes`
    - 링크 타임 `2005-12-01 08:35:46 UTC`
    - MD5 `e0c10106626711f287ff91c0d6314407`
    - SHA1 `650fc6b3e4f62ecdc1ec5728f36bb46ba0f74d05`
    - SHA256 `06361562cc53d759fb5a4c2b7aac348e4d23fe59be3b2871b14678365283ca47`
    - 크기 `16355328 bytes`
    - 링크 타임 `2012-07-07 08:47:11 UTC`
  - SATWE 구조 해석 엔진 식별값
    - MD5 `2717b58246237b35d44ef2e49712d3a2`
    - SHA1 `d475ace24b9aedebf431efc68f9db32d5ae761bd`
    - SHA256 `bd04715c5c43c862c38a4ad6c2167ad082a352881e04a35117af9bbfad8e5613`
    - 크기 `9908224 bytes`
    - 링크 타임 `2011-01-12 06:37:39 UTC`
    - MD5 `daea40562458fc7ae1adb812137d3d05`
    - SHA1 `1ce1111702b765f5c4d09315ff1f0d914f7e5c70`
    - SHA256 `da2b170994031477091be89c8835ff9db1a5304f3f2f25344654f44d0430ced1`
    - 크기 `8454144 bytes`
    - 링크 타임 `2012-11-29 03:10:12 UTC`
    - MD5 `2740a703859cbd8b43425d4a2cacb5ec`
    - SHA1 `ca665b59bc590292f94c23e04fa458f90d7b20c9`
    - SHA256 `aeaa389453f04a9e79ff6c8b7b66db7b65d4aaffc6cac0bd7957257a30468e33`
    - 크기 `16568320 bytes`
    - 링크 타임 `2014-12-30 03:23:43 UTC`
    - MD5 `ebff5b7d4c5becb8715009df596c5a91`
    - SHA1 `829f8be65dfe159d2b0dc7ee7a61a017acb54b7b`
    - SHA256 `37414d9ca87a132ec5081f3e7590d04498237746f9a7479c6b443accee17a062`
    - 크기 `8089600 bytes`
    - 링크 타임 `2009-04-22 01:46:46 UTC`
    - MD5 `cb66a4d52a30bfcd980fe50e7e3f73f0`
    - SHA1 `e6018cd482c012de8b69c64dc3165337bc121b86`
    - SHA256 `66fe485f29a6405265756aaf7f822b9ceb56e108afabd414ee222ee9657dd7e2`
    - 크기 `9219072 bytes`
    - 링크 타임 `N/A`
  - 추가 PKPM CAD 파일 식별값
    - MD5 `075b4aa105e728f2b659723e3f36c72c`
    - SHA1 `145ef372c3e9c352eaaa53bb0893749163e49892`
    - SHA256 `c11a210cb98095422d0d33cbd4e9ecc86b95024f956ede812e17c97e79591cfa`
    - 크기 `6852608 bytes`
    - 링크 타임 `2012-06-18 10:01:54 UTC`
    - MD5 `cf859f164870d113608a843e4a9600ab`
    - SHA1 `952ed694b60c34ba12df9d392269eae3a4f11be4`
    - SHA256 `7e00030a35504de5c0d16020aa40cbaf5d36561e0716feb8f73235579a7b0909`
    - 크기 `8392704 bytes`
    - 링크 타임 `2012-11-29 03:10:12 UTC`
- MOHID는 포르투갈 리스본 Instituto Superior Técnico의 MARETEC가 개발한 **오픈소스 수계 모델링 시스템**으로, 해양·연안 수리역학, 수질 시뮬레이션, 퇴적물 이동, 유류 유출 모델링, 라그랑지안 입자 추적을 다룸
  - 현재 시점에서도 의도된 공격 효과를 단정적으로 식별하지 못했다고 밝힘
  - MD5 `f4dbbb78979c1ee8a1523c77065e18a5`
  - SHA1 `9e089a733fb2740c0e408b2a25d8f5a451584cf6`
  - SHA256 `e775049d1ecf68dee870f1a5c36b2f3542d1182782eb497b8ccfd2309c400b3a`
  - 파일 크기 `5443584 bytes`
  - 파일 타입 `PE32 executable for MS Windows 4.00 (console), Intel i386, 3 sections`
  - 링크 타임 `2002-10-18 09:29:54 UTC`
- LS-DYNA는 이란의 JCPOA Section T 위반 의혹 관련 공개 보도에서 **핵무기 개발 관련 컴퓨터 모델링** 연구와 함께 인용된 바 있음

### 탐지 규칙과 침해 지표
- ## 침해 지표
  - 확인된 파일 3종은 **fast16.sys**, **connotify.dll**, **svcmgmt.exe**임
  - `fast16.sys`: MD5 `0ff6abe0252d4f37a196a1231fae5f26`, SHA1 `92e9dcaf7249110047ef121b7586c81d4b8cb4e5`, SHA256 `07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529`
  - `connotify.dll`: MD5 `410eddfc19de44249897986ecc8ac449`, SHA1 `675cb83cec5f25ebbe8d9f90dea3d836fcb1c234`, SHA256 `8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9`
  - `svcmgmt.exe`: MD5 `dbe51eabebf9d4ef9581ef99844a2944`, SHA1 `de584703c78a60a56028f9834086facd1401b355`, SHA256 `9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525`
- ## apt_fast16_carrier
  - carrier, Lua 페이로드, 평문 변형을 잡도록 설계됐고 기준 해시는 `9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525`임
  - Lua 바이트코드 매직 `1B 4C 75 61`, `build_wormlet_table`, `unpropagate`, `scm_wormlet_install`, `install_implant`, `start_worm`, `ok_to_propagate` 문자열을 사용함
  - `Symantec`, `Sygate Personal Firewall`, `Zone Labs\TrueVector`, `Kaspersky Anti-Hacker` 등 보안 제품 레지스트리 키 다수를 조건에 포함함
  - 암호화 문자열 바이트 패턴, 암호 상수 2개, 저장 컨테이너 길이 복호화 코드, `file` 문자열이 들어간 저장 레코드 시그니처도 함께 탐지함
  - 조건은 MZ 헤더와 10MB 미만 파일을 기준으로 `$s*` 3개, `$rk*` 12개, `$e*` 아무 항목, 암호 상수 2개의 근접 배치, `$code1`, `$stor1` 가운데 하나를 만족하거나, Lua 매직과 `$s*` 7개를 만족할 때 성립함
- ## apt_fast16_driver
  - driver 또는 관련 프로젝트 파일을 잡도록 설계됐고 기준 해시는 `07c69fc33271cf5a2ce03ac1fed7a3b16357aec093c5bf9ef61fbfa4348d0529`임
  - `@(#)foo.c :`, `@(#)par.h :`, `@(#)pae.h :`, `@(#)ree.c :` 같은 소스 파일 식별 문자열을 다수 사용함
  - `\\Device\\fast16`, `\\??\\fast16`, `C:\\buildy\\`, `driver\\fd\\i386\\fast16.pdb`, `push 0A57Ch ; DeviceType` 패턴을 포함함
  - `ExAllocatePool`, `ExAllocatePoolWithTag`, `ExFreePool`, `ExFreePoolWithTag`를 XOR 형태로 푸시하는 API 패턴도 시그니처에 들어감
  - 조건은 10MB 미만 파일에서 MZ 헤더와 함께 PDB 경로 2개, `C:\\buildy\\`와 소스 식별자 1개, `#devtype == 3`, `pe.machine == pe.MACHINE_I386`, `pe.subsystem == pe.SUBSYSTEM_NATIVE`, 아무 `api*`, `dev*` 2개 가운데 하나를 만족하거나, 소스 식별자 6개를 만족할 때 성립함
- ## clean_fast16_patchtarget
  - **패치 대상 소프트웨어**를 탐지하며 `most probably clean`으로 표기됐고 기준 해시는 `8fcb4d3d4df61719ee3da98241393779290e0efcd88a49e363e2a2dfbc04dae9`임
  - `$el0`부터 `$el99`까지 이어지는 다수의 바이트 패턴을 사용함
  - 조건은 20MB 미만 파일, MZ 헤더, 정의된 시그니처 가운데 **2개 이상 일치**임
- ## apt_fast16_patch
  - **패치 코드** 자체를 탐지하며 정적으로 패치된 파일이나 메모리 덤프에 있을 수 있음
  - 기준 해시는 `0ff6abe0252d4f37a196a1231fae5f26`임
  - `$p1`, `$p2`, `$p3` 세 개의 바이트 패턴을 정의함
  - 조건은 `any of them`으로, 세 패턴 가운데 하나만 일치해도 탐지됨

### 계보와 역사적 함의
- 바이너리 안의 `@(#)par.h $Revision: 1.3 $` 문자열은 이 프레임워크의 계보를 짐작하게 하는 단서가 됨
- `@(#)` 접두사는 1970~1980년대 Unix의 **SCCS/RCS** 계열 소스 관리 관례를 가리키며, mid-2000s Windows 커널 드라이버에서 이런 흔적은 드묾
- 이런 아티팩트는 전형적인 Windows 전용 개발자보다, 오래된 고보안 Unix 환경의 문화와 툴체인에 익숙한 장기 엔지니어의 흔적에 더 가까워 보임
- `svcmgmt.exe`는 VirusTotal에 거의 10년 전에 업로드됐지만 지금도 탐지율이 매우 낮고, 한 엔진만 제한적 신뢰도로 일반 악성으로 분류하고 있음
- ShadowBrokers의 [Territorial Dispute](https://static.crysys.hu/publications/files/tedi/ukatemicrysys_territorialdispute.pdf) 시그니처와 결합하면, `fast16`은 심각한 은밀형 **국가급 사이버 사보타주**의 개발 시점을 다시 보게 만듦
- `fast16`은 더 널리 알려진 계열보다 앞서 **임베디드 스크립팅 엔진**, **컴파일러 기반 협소 타기팅**, **커널 레벨 패치**를 결합한 일관된 구조를 보여 줌
- 오랜 기간 공개 분석, 명명된 캠페인, 대표 사건과의 연결고리가 거의 없었고, 내부에 남은 사람이 읽을 수 있는 표식도 `*** Nothing to see here – carry on***`처럼 절제된 형태에 그침
- 이후의 [Lua- and LuaJIT-based toolkits](https://www.sentinelone.com/labs/sandman-apt-a-mystery-group-targeting-telcos-with-a-luajit-toolkit/)로 이어지는 APT 진화 흐름 사이의 연결점으로 위치 지어짐

## Comments



### Comment 56425

- Author: neo
- Created: 2026-04-28T05:39:26+09:00
- Points: 1

###### [Hacker News 의견들](https://news.ycombinator.com/item?id=47913855) 
- 이 대목이 특히 재밌었음  
  **SCCS/RCS 표기법**이 2005년 **Windows 커널 코드**에 나온 건, 요즘 사무실에서 다이얼식 전화기를 보는 수준이라는 비유였는데 꽤 설득력 있었음  
  2006년에 일했던 천체물리 연구실도 여전히 svn을 쓰고 있었고, 코드베이스에는 70~80년대 시스템 흔적이 남은 Fortran이 많았음  
  그래도 최신 최적화 컴파일러 덕분에 잘 돌아갔고, 90년대에 Vax에서 Linux로 옮긴 과정도 놀랄 만큼 매끄러웠음  
  예전에 들은 **do over or make due** 발표가 떠오르는데, 대체로 멀쩡히 돌아가는 큰 코드베이스를 통째로 다시 쓰는 건 현대 도구로 겨우 이어 붙여 쓸 수 있다면 그만한 가치가 없다는 뜻이었음
  - 2012년쯤까지도 **RCS 기반 SCM**을 쓰던 회사에서 일했는데, 공유 파일 서버 위에 RCS를 억지로 감싼 해킹성 시스템이었음  
    이름은 **MKS**였고, 특정 리비전 트리를 "project file"로 관리하는 방식이었는데 Java EE로 다시 만든 버전조차 아닌 90년대 구버전 같았음  
    파일 상단엔 `$Revision: 1.3 $` 같은 태그와 changelog가 들어갔지만, 새 파일 상당수는 태그 자체를 안 넣어서 치환도 안 됐고 일관성은 엉망이었음  
    대상 디바이스 계열은 90년대 중반부터 시작됐지만, 그 시점 코드 자체는 실질적으로 5년 넘은 게 거의 없었음  
    엔지니어가 수십 명뿐이어도 커밋 충돌이 잦았고 전체 트리가 자주 망가졌음  
    재미로 전체 히스토리를 읽어 **git**으로 가져오는 스크립트를 썼는데, 몇 년만 거슬러 올라가도 기록이 완전히 난장판이었음  
    왜 그때까지 그걸 썼는지는 모르겠지만, 하드웨어 회사들은 생각보다 최근까지도 소스 관리를 "원격 공유 폴더" 정도로 여기는 경우가 있었고, 그래서 소프트웨어 쪽 **버전 관리**가 우선순위가 아니었던 듯함
  - 2026년에 **R**를 쓰고 있다면, 어딘가에서는 70~80년대 **Fortran**에서 컴파일된 코드를 거의 반드시 호출하고 있을 가능성이 큼  
    수치 계산 세계에서 그 계보가 아직도 기반 역할을 함
  - 예전엔 **Stuxnet**의 정부 배후설을 좀 의심했는데, 이런 메모를 보면 왜 그런 추정이 나왔는지 이해가 됐음  
    2000년대까지도 **RCS**를 쓰는 곳은 실제로 있었고, 도구 자체로는 SVN이나 CVS보다 나은 점도 있었음
  - 그렇다면 그런 **3글자 약어 기관들**이 악성코드 유형마다 해당 분야 출신 인력을 끌어올 수 있었다는 뜻일까 궁금함  
    예를 들어 fast16은 원래 과학 계산 소프트웨어를 만들던 사람이, Stunex는 Siemens에서 일하던 사람이 썼을 수도 있겠다는 상상도 듦
  - **리팩터링**이 만병통치약은 아님  
    처음에 코드가 리팩터링이 필요해진 원인이 그대로 남아 있으면, 결국 같은 상태로 다시 돌아오게 됨  
    그런 원인은 개발자의 습관, 신념, 직업적 트라우마 같은 심리적 층위까지 깊게 박혀 있는 경우도 많음  
    여기에 **Conway의 법칙**까지 겹치면 팀은 결국 더 큰 조직 구조를 닮은 소프트웨어를 만들 수밖에 없고, 조직이 안 바뀌면 리팩터링 결과도 대체로 반복됨  
    예외는 다른 팀의 코드베이스나 전임자의 코드를 맡아 구조를 다시 잡을 때쯤임  
    하지만 같은 사람들이 자기 코드 리팩터링을 선언하면, 대개는 자기들에게 더 편한 쥐덫을 하나 더 만드는 데 그치기 쉬움  
    자기 사고방식의 산물을 반복 개선하는 건 괜찮지만, 회전목마에서 내리려면 **나쁜 아키텍처의 원인**을 적어 보고 스스로를 냉정하게 점검해야 함  
    많은 개발자가 믿고 싶어 하는 것처럼 "조심하고 성실하면 다소 나쁜 설계도 잘 구현할 수 있다"는 말은 대개 맞지 않음  
    결국 뿌리는 **설계**고, 거기서 자라난 나무를 받아들이든 베어내든 해야지 가지치기만으로는 한계가 큼

- 이 글은 꽤 **오싹하게** 다가옴  
  이 악성코드가 **20년 동안** 탐지망 아래에 있었다는 사실만으로도 충분히 불길함

- 궁금한 사람을 위한 다운로드 링크임  
  [https://bazaar.abuse.ch/sample/9a10e1faa86a5d39417cae44da5ad...](<https://bazaar.abuse.ch/sample/9a10e1faa86a5d39417cae44da5adf38824dfb9a16432e34df766aa1dc9e3525/>)  
  아마 먼저 **Windows XP VM**부터 만들 것 같음
  - 아직 **Windows 서비스 파일** 올라온 적 있나 궁금함  
    저건 로더로만 보임

- **IEEE-754**는 +-*/와 sqrt에 대해서만 올바른 반올림을 강제함  
  sin/cos/exp/log/pow 같은 **초월함수**는 마지막 몇 ULP 차이를 허용하고, glibc, musl, MSVC, Intel SVML도 실제로 그렇게 동작함  
  PID는 기본 연산만 써서 libm 차이 영향을 덜 받지만, 모터 벡터 제어나 센서 선형화는 매 사이클 이런 함수들을 건드리기 때문에 작은 불일치가 누적됨  
  그래서 소스 코드 diff가 전혀 없어도, 링크된 **libm**만 바뀌어서 현장 동작이 드리프트할 수 있음  
  이런 차이는 Payne-Hanek argument reduction이나 최악의 **table-maker's dilemma** 경계에서 실제로 드러남  
  아마 그래서 안전 필수 시스템 가이드는 그냥 "IEEE-754 준수"라고 쓰지 않고 특정 **libm 빌드**를 고정하는 듯함

- 정말 대단한 발견임  
  이 규칙들이 정확히 어떤 대상을 겨냥했고 결과를 어떻게 바꿨는지 몹시 궁금함  
  혹시 원자로처럼 아주 특정한 시뮬레이션 조건에서만 차이를 만들도록 설계된 건지도 모르겠음
  - **LS-DYNA** 같은 소프트웨어가 어떻게 변조될 수 있는지 좀 파봤음  
    예를 들어 공개 매뉴얼 [1]에 있는 **EOS_JWL 방정식**은 LS-DYNA가 구현하는 식인데, 다른 식들과 함께 쓰면 미사일 탄두의 기폭장치가 주폭약을 터뜨려 20m 거리에서 특정 압력파를 만들기까지 걸리는 시간 같은 걸 계산하는 데 쓸 수 있어 보임  
    그 결과를 거꾸로 이용하면 필요한 신관 타이밍도 추정할 수 있음  
    LS-DYNA에 들어가는 식과 파라미터는 [2] 같은 과학 연구에서 오는데, 이건 1980년대 미국 정부의 고폭약 실험 연구임  
    여기엔 폭약이 이를 감싸는 다양한 재료와 마찰하는 특성을 측정한 실험도 들어 있음  
    폭약 모델링용 식이 이미 준비돼 있으니, 그런 식만 살짝 건드려 **마찰계수**에 ±20% 노이즈를 얹어도 과학자나 엔지니어는 소프트웨어 조작보다 강재 제조 품질 문제를 먼저 의심할 가능성이 큼  
    현대판 비유로는 어떤 적성국이 중국 크래킹 그룹이 중국 게시판에 올린 **Ansys Autodyn 2026 R1** 불법 복제본을 러시아 ISP 뒤의 소수 시더에게서 받아 쓰는 상황을 떠올릴 수 있음  
    그러다 나중에 실험값과 계산값이 자꾸 어긋나면 그제야 복제본이 고의로 변조됐을 수 있다고 의심할 수 있음  
    다만 지금은 그 적성국이 랜덤한 대학이나 항공우주·방산 컨설팅 회사의 해킹된 네트워크에서 정식 사본을 빼오는 쪽이 더 쉬울 수도 있음  
    2026년의 적성국이 소프트웨어를 아예 처음부터 만들지 못할 거라고 보는 것도 순진할 수 있고, 수작업 계산이나 실험에 의존해서도 원하는 결과에 도달할 수 있음  
    결국 제조 품질을 검증하려면 실험 장비와 역량은 원래부터 필요함  
    **시뮬레이션 소프트웨어**는 주로 모형 제작과 물리 실험 횟수를 줄여 비용과 시간을 아껴 줄 뿐임  
    예를 들어 [3]처럼 포탄이 장갑판에 맞는 상황을 1000번 돌리는 건 싸지만, 현실에서 그걸 반복하는 건 훨씬 비싸고 오래 걸림  
    [1] [https://ftp.lstc.com/anonymous/outgoing/jday/manuals/LS-DYNA...](<https://ftp.lstc.com/anonymous/outgoing/jday/manuals/LS-DYNA_manual_Vol_I_R6.1.0.pdf#page=1189>)  
    [2] [https://www.osti.gov/servlets/purl/6530310](<https://www.osti.gov/servlets/purl/6530310>)  
    [3] [https://www.youtube.com/watch?v=_dv2PecKUBM](<https://www.youtube.com/watch?v=_dv2PecKUBM>)

- 내가 공개하는 것들에 **RCS 리비전 데이터**가 붙어 있는 걸 보면, 사람들이 잠깐이라도 멈칫했으면 좋겠음

- 최근에 읽은 책은 **Sandworm**: A New Era of Cyberwar and the Hunt for the Kremlin's Most Dangerous Hackers, Andy Greenberg 저작임  
  꽤 좋았고, 새 정보들이 계속 나오고 있으니 후속 시리즈가 필요할 수도 있겠다고 봄

- **Guix**와 재현 가능한 컴퓨팅이 **PowerPC**나 레거시 머신까지 이식 가능해지는 걸 보면, 정부나 1984 같은 기관들, 그리고 중동의 몇몇 조직은 진짜 싫어할 것 같음  
  환경이 더 **이기종적**일수록 유리함

- 핵심 수는 **웜**임  
  다른 컴퓨터에서 검사해도 잡히지 않는데, 애초에 깨끗한 두 번째 컴퓨터 자체가 없기 때문임

- 재밌는 발견이긴 한데, **소스 관리** 관련 코멘트는 약간 어긋난 느낌도 듦  
  그 시절에도 SCCS 비슷한 것들은 아직 남아 있었을 테고, CVS가 비슷한 스타일이었는지 잠깐 헷갈리기도 함
  - 그 코멘트는 아마 **Windows 소프트웨어**에서 그게 드물다는 뜻이었을 거라고 봄  
    개발자들이 원래는 **UNIX 쪽** 작업도 하던 사람들임을 시사하는데, SCCS/RCS는 그쪽에선 흔했기 때문임
