Dockerイメージの中にあるソースコードや実行ファイルは、基本的に誰でも見て使うことができます。
他人がDockerイメージ内のソースコードを見られないようにし、許可されたユーザーだけが使用できるようにするいくつかの方法があります。

1. マルチステージビルド

Dockerが標準で提供しているイメージビルド機能です。
前のステージから特定のファイルだけを選んで、現在のステージにコピーすることができます。
指定していないファイルは最終イメージに含まれないため、イメージサイズを削減できるだけでなく、不要なファイルが他人に露出するのを防ぐこともできます。

FROM ubuntu:24.04 AS builder
WORKDIR /var/work
RUN touch secret.txt public.txt

FROM ubuntu:24.04
WORKDIR /var/work
# Copy only public.txt
COPY --from=builder /var/work/public.txt .

2. ファイル形式ごとの難読化・DRM適用

上記のようにマルチステージビルドを使えば、Dockerイメージ内で露出するファイルの多くを隠すことができます。
しかし、マルチステージビルドの構造上、最終ステージに含まれるファイルはそのまま残ってしまいます。
最終ステージでは、各ファイル(シェルスクリプト、C/C++プログラムなど)の形式に合わせて、個別の難読化やDRM技術を適用する必要があります。

2.1 シェルスクリプトの難読化・DRM適用

シェルスクリプト保護ツールの中で最も広く知られているのはshcです。
しかしshcには、前回の記事で分析したように致命的な脆弱性が存在します。
shcの脆弱性を補ったHimitsuShellを使ってみましょう。

# 1. download and load docker image
curl -LO https://github.com/HimitsuShell/Himitsu/releases/download/v1.2.0/himitsu_core_v1.2.0.tar.gz
docker load -i himitsu_core_v1.2.0.tar.gz

# 2. start container
docker run --name himitsu_core -d -it himitsu_core:v1.2.0

# 3. upload your shell script (must be named launcher.sh)
docker cp launcher.sh himitsu_core:/var/work/

# 4. build and download binary (10–20 seconds)
docker exec himitsu_core /var/work/compile.sh
docker cp himitsu_core:/var/work/safeLauncher .

# 5. Run the obfuscated binary
chmod +x ./safeLauncher
./safeLauncher

2.2 Pythonの難読化・DRM適用

Python保護ツールの中で最も広く知られているのはPyarmorです。
Pyarmorは難読化や有効期限の設定などの機能を提供します。

# Install Pyarmor
pip install pyarmor

# Obfuscate the Python script
pyarmor gen foo.py

# Run the obfuscated script
python dist/foo.py

2.3 C/C++、Objective-C/C++、Swift、Rust、Zig、Kotlin/Nativeなど

LLVMベースの難読化ツールを使えば、C/C++やObjective-Cなど多様な言語を、商用ツール(VMProtect、Enigma Protectorなど)と同等のレベルまで難読化することができます。
C/C++コードを例に、HimitsuObfuscatorを使ってみましょう。

難読化ツール LLVMバージョン ライセンス 商用利用 メンテナンス 特徴
OLLVM 4 UIUC/NCSA 許可 2017年に開発停止 LLVM難読化ツールの出発点
Hikari Obfuscator 8 改変されたAGPLv3 制限付きで許可 2020年に開発停止 OLLVM以降の先進的な難読化技術を適用
Himitsu Obfuscator 17 MIT 許可 継続中 OLLVMのバグ修正、難読化範囲の拡張
# Required: Ubuntu 24.04

# download and extract obfuscator
curl -LO https://github.com/HimitsuShell/HimitsuObfuscator/releases/download/v1.2.0_0/himitsu_obfuscator_v1.2.0_0.tar
tar -xvf himitsu_obfuscator_v1.2.0_0.tar

vim main.c
-----------------------------
#include <stdio.h>
int main() {
  printf("Hello World!\n");
  return 0;
}
-----------------------------

# builds a binary that runs on any linux (static musl)
sudo apt-get install -y build-essential
./compiler/bin/x86_64-unknown-linux-musl-clang -flto -fuse-ld=lld -mllvm -sobf -mllvm -sub -static main.c -o main
./main

まとめ

上記の方法を多層的に適用すれば、スクリプトキディのような初心者によるソースコードの窃取はほとんど防ぐことができます。
しかし、実力のあるリバースエンジニアに対しては、攻撃を遅らせ、困難にするだけであり、不可能にすることはできません。
したがって、上記の方法に加えて、様々な高強度の技術を継続的に適用していく必要があります。

次回の記事で、さらに他の方法をご紹介します。