1. はじめに
混合タイプ ファイル (Polyglot ファイル) は、正当なタイプ A または正当なタイプ B のいずれかであるファイルを指します。
たとえば、参考資料 3 のファイルは、次の図に示すように、ブラウザで通常に開くことができる html ファイルですが、JVM で通常に実行できる .jar ファイルでもあります (参考資料 4)。
このようなファイルは混合タイプのファイルであり、ポリグロットとも呼ばれます。ファイル タイプの検出制限をバイパスすることができます。たとえば、一部のシステムでは、ユーザーが JS ファイルや PHP ファイルなどの潜在的に危険なファイルをアップロードできないようにするために、ユーザーに PNG のアップロードのみを許可します。この制限は、混合タイプのファイルを使用することで克服できます。
2. ハイブリッドにはどのような種類がありますか?
参考資料 5 には、混合タイプ ファイルの実際の例が多数掲載されています。
(1)7ZIP+JAR.7z: 7z + jar + zip
(2)7ZIP+RAR-1.7z:7z + rar
(3)AVI+HTML.avi:avi + html
(4)BMP+HTML+JAR.bmp: bmp + html + jar + zip
(5)DOCX+ELF+JAR+PDF+RAR-1.zip:docx + elf + jar + pdf + rar + zip
組み合わせは102種類ありますが、これは2018年のデータですので、さらに多くの組み合わせが登場している可能性があります。
HTML+PDF-3.html (参考 6) を例に挙げます。
(1) このファイルをダウンロードした後、ブラウザで直接開くと、次のような効果が得られます。
(2) このファイルの拡張子を pdf に変更すると、pdf リーダーで開くことができるようになり、次のような効果があります。
3. 混合タイプの悪意のあるサンプル ファミリを使用する
参考資料 4 には、次の 2 つの悪意のあるサンプル ファミリの例が示されています。
- 悪意のあるサンプル ファミリ StrRAT は MSI 形式を使用して JAR ファイルを偽装します
- 悪意のあるサンプル ファミリ Ratty と StrRAT は CAB 形式を使用して JAR ファイルを偽装します
StrRAT と Ratty へのリンクも示されています。
4. 混合型ファイルの生成方法
mitra ツール (参照: https://github.com/corgami/mitra) を使用して、混合タイプのファイルを生成します。
ソース コードから判断すると、これを直接使用すると、次の 2 種類のファイルが混在したファイルしか生成できません。
def main():
args = Setup(__description__)
fn1,fn2 = args.file1, args.file2 #这里显示只读入两个文件
with open(fn1, "rb") as f:
fdata1 = f.read()
with open(fn2, "rb") as f:
fdata2 = f.read()
pad = getVar("PAD")
fdata1 += b"\1" * (pad - len(fdata1))
fdata2 += b"\1" * (pad - len(fdata2))
これを使用するには、作成者は python3.8 環境で次のコマンドを直接実行し、エラーに従って不足しているファイルをインストールまたは mkdir します。
python mitra.py pic1.png 2203.07561.pdf
ファイルを生成できます。これは、PDF リーダーで直接開くことができる PDF ファイルであり、PDF ファイルの内容を確認できます。ファイル拡張子を に変更すると、画像リーダーでP(10-4b8516)-PNG[PDF].4425bf7c.png.pdf
開くことができます。P(10-4b8516)-PNG[PDF].4425bf7c.png.png
見えるのは絵だけです。
mitra ファイルでは、すべての種類のファイルを組み合わせて生成できるわけではないことに注意してください。たとえば、私の実験では、.py ファイルを png 画像に結合することはできませんでした。論文参考文献 7 に記載されている組み合わせは次のとおりです。
DCM+GIF, DCM+JAR, DCM+ISO, DCM+PDF, DCM+ZiP, GIF+ISO, GIF+JAR, GIF+Zip, JPG+JAR, JPG+Zip,
PE+ISO, PE+JAR, PE+Zip, PNG+ISO, PNG+JAR, PNG+PDF, PNG+Zip, TIFF+ISO, TIFF+JAR, TIFF+PDF, TIFF+Zip
5. ファイルの種類を検出する方法
非混合タイプのファイルの場合は、次のようないくつかの検出方法があり、いずれも比較的成熟したツールを備えています。
- 一般的なプログラミング言語の種類については、guesslang ツールを使用して検出できます (参照: https://github.com/yoeo/guesslang/tree/master)。深層学習モデルを使用して、次の種類のテキスト ファイルを識別できます。
Assembly Batchfile C C# C++
Clojure CMake COBOL CoffeeScript CSS
CSV Dart DM Dockerfile Elixir
Erlang Fortran Go Groovy Haskell
HTML INI Java JavaScript JSON
Julia Kotlin Lisp Lua Makefile
Markdown Matlab Objective-C OCaml Pascal
Perl PHP PowerShell Prolog Python
R Ruby Rust Scala Shell
SQL Swift TeX TOML TypeScript
Verilog Visual Basic XML YAML
- exe や elf などのファイルについては、polydet を使用して検出できます (参考: https://github.com/Polydet/polydet/tree/master)。
定義された yara ルールを使用して、次の種類のファイルを検出できます
'7z', 'avi', 'bmp', 'elf', 'exe', 'flac', 'gif', 'html', 'jpg', 'mp3', 'ogg', 'pdf', 'php', 'png', 'polyglot_level', 'rar', 'swf', 'tar', 'tiff', 'wav', 'webm', 'zip'
- 多くの異なるタイプの画像、ビデオ、オーディオ、さらには SQLITE タイプについては、flee を使用して検出できます (参照: https://github.com/ua-nick/fleep-py/tree/master)。
彼は魔法を使用できます。 -number 次の種類のファイルを検出します
图像: BMP,GIF,ICO,JP2,JPEG,PNG,PSD,TIFF,WEBP
原始图像:ARW,CR2,CRW,DNG,ERF,NEF,NRW,ORF,PEF,RAF,RAW,RW2,SRW,X3F
矢量图:AI,EPS
3D图像:C4D,FBX,MA,MS3D,MTL,OBJ,PLY,WRL,X3D,XSI
音频:AAC,AC3,AIFF,AMR,AU,FLAC,M4A,MIDI,MKA,MP3,OGA,RA,VOC,WAV,WMA
视频:3G2,3GP,ASF,AVI,FLV,M4V,MKV,MOV,MP4,MPG,OGV,SWF,VOB,WEBM,WMV
文档:DOC,DOCX,EPUB,KEY,NUMBERS,ODP,ODS,ODT,PAGES,PDF,PPS,PPT,PPTX,RTF,XLS,XLSX,XML,
压缩:7Z,DMG,GZ,ISO,RAR,TAR.Z,ZIP,
可执行文件:COM,EXE,JAR
字体:OTF,TTF,WOFF,WOFF2
系统文件:CAB,CAT,DLL,DRV,REG,SDB,SYS
数据库:SQLITE
6. 混合タイプのファイルの検出
- Linux の file コマンドは、いくつかの混合タイプのファイルを検出できます (参考 8)。例は次のとおりです。
$ file --keep-going --raw mA-pdf.pdf
mA-pdf.pdf: tar archive
- DR-DOS executable (COM)
- Windows Program Information File for R>>
- DOS/MBR boot sector
- Nintendo DS ROM image: "%PDF-1.3" (┬╢, Rev.116)
- Plot84 plotting file DOS/MBR boot sector
- SymbOS executable v., name: 1 0 obj
- PDF document, version 1.3
- Old EZD Electron Density Map
- Scream Tracker Sample adlib drum mono 8bit
- SoundFX Module sound file
- DICOM medical imaging data
- CCP4 Electron Density Map
- VirtualBox Disk Image (%PDF-1.3), 5715999566798081280 bytes
- data
- 機械学習手法については、いくつかの検出アイデアを示した記事を見つけました。記事の参考文献 7 を参照してください:
(1) 従来の機械学習手法: 2 分類モデル、バイナリ バイト ヒストグラム、合計 256 バイトの出現、モデルによって特徴付けられます。従来のアンサンブル学習ツリー モデル(ライト GBM、勾配ブースティング、CatBoost
など)容量を超えた場合は切り捨てられます)
論文が提供する検出結果によると、
(1) ファイルコマンドを直接使用すると、その効果は理想的ではなく、多くの場合、ファイルを正確に検出できません
(2) CatBoost をチューニングした後、効果は他のモデルよりも優れており、より優れていますMalconv2よりも。
7. まとめ
この記事では、混合タイプのファイルの定義、混合タイプの悪意のあるサンプル ファミリの使用、混合タイプのファイルの生成方法、非混合タイプのファイルの検出方法と混合タイプのファイルの検出方法についてまとめています。
参考
- ポリグロットの定義。https://en.wikipedia.org/wiki/Polyglot_(コンピューティング)
- https://medium.com/swlh/polyglot-files-a-hackers-best-friend-850bf812dd8a
- html 混合 Java ファイル。https://github.com/deepinstinct/JAR-Polyglot-POC/blob/main/eula.html
- https://www.deepinstinct.com/blog/malicious-jars-and-polyglot-files-who-do-you-think-you-jar
- https://github.com/Polydet/polyglot-database/tree/master/files
- https://github.com/Polydet/polyglot-database/blob/master/files/HTML%2BPDF-3.html
- 多言語ファイルの検出に向けて。2022年。https://arxiv.org/pdf/2203.07561.pdf
- Polyglog ファイルを生成するツール。https://github.com/corgami/mitra