📖この記事は約26分で読めます
1. 日常の脆弱性スキャンが重大なセキュリティインシデントに発展した瞬間
予期せぬアラートの背後にある脅威
2026年の初頭、多くの機械学習エンジニアやデータサイエンティストにとって、ある日突然、いつものように動いていた環境が危険にさらされていました。これは単なるバグ修正やバージョンアップの通知ではありませんでした。日常的に行われていた脆弱性スキャンの結果、PyTorchという深層学習の基盤ライブラリに関連する深刻なサプライチェーン攻撃が発覚したのです。
私自身、自宅のワークステーションでOllamaやLM Studioを使ってローカルLLMを動かしている際、依存パッケージの更新は必ず行っています。しかし、今回の件は単なるパッケージの改ざんではなく、開発者の環境そのものを標的とした高度な攻撃でした。SSH鍵やAWSの認証情報、Kubernetesの設定ファイル、Dockerのトークンまでが狙われていたという事実は、衝撃的でした。
この攻撃は、PyTorchの公式リポジトリやパッケージマネージャーを通じて、悪意のあるコードがユーザーの環境に潜入する形をとっていました。ユーザーが気づかないうちに、重要な認証情報が外部に送信される仕組みでした。これは、オープンソースエコシステムにおける信頼の崩壊を意味します。私たちはこれまで、PyPI(Python Package Index)からインストールするパッケージを無条件に信頼してきました。
なぜローカルLLMユーザーも無関係ではないのか
一見すると、これは大規模な企業向けクラウド環境の問題に思えるかもしれません。しかし、ローカルLLMを運用している個人開発者や小規模チームにとっても、この脅威は直結しています。なぜなら、多くのローカルLLMランタイムやツールチェーンが、背後でPyTorchやその派生ライブラリに依存しているからです。
例えば、Stable Diffusionの推論エンジンや、ファインチューニング用のスクリプト、さらにはvLLMのような高性能推論サーバーでも、深層学習の計算グラフを構築するためにPyTorchが使用されています。もしこれらの依存関係の中で悪意のあるコードが実行されれば、あなたのローカル環境にある秘密鍵やAPIキーが漏洩するリスクがあります。
特に、GitHub ActionsやCI/CDパイプラインで自動テストを実行している場合、そのビルド環境内でも同様の攻撃を受ける可能性があります。ビルドサーバー上の認証情報が盗まれると、本番環境への不正アクセスが容易になります。この攻撃は、単なるマルウェア感染ではなく、開発者のアイデンティティそのものを乗っ取ることを目的としていました。
サプライチェーン攻撃の新しい潮流
近年、サイバー攻撃のターゲットは、最終ユーザーの端末から、その端末が依存するソフトウェアの供給連鎖、すなわち「サプライチェーン」へとシフトしています。SolarWinds事件以来、この傾向は加速していますが、2026年のPyTorch攻撃はその頂点に達したと言えます。
攻撃者は、脆弱性を直接突くのではなく、信頼されたソフトウェア更新プロセスそのものを悪用しました。ユーザーは正規の更新だと思ってインストールしますが、その中に隠れたコードが実行されるという手法です。これは検知が極めて困難です。なぜなら、デジタル署名が有効で、公式リポジトリからダウンロードされているからです。
この攻撃が特に恐ろしいのは、標的が「機械学習チーム」に特化している点です。AIモデルのトレーニングには多額の費用と時間がかかります。また、モデルの重みやプロンプトデータ、ユーザーデータなど、企業にとって最も価値のある情報にアクセスできる立場にあります。攻撃者は、これらの資産を狙っていたのです。
2. 攻撃の手口:SSH鍵からクラウド凭证まで、何が狙われたのか
標的となった認証情報の種類
今回の攻撃で狙われたのは、システムへの不正アクセスを可能にする「鍵」と「凭证」です。具体的には、SSH公開鍵・秘密鍵ペア、AWS IAMユーザーのアクセスキーとシークレットキー、Kubernetesのkubeconfigファイル、Dockerレジストリのログイントークンなどが挙げられます。
SSH鍵は、サーバーへのログインやGitリポジトリへのアクセスに使用されます。これが漏洩すれば、攻撃者はあなたの開発マシンから直接、本番サーバーやプライベートリポジトリにアクセスできます。AWS凭证は、クラウドリソースの管理権限を持っています。これを悪用されると、不正なインスタンスの起動やデータ転送による高額請求、さらにはデータ漏洩が起きます。
Kubernetesのkubeconfigファイルは、コンテナオーケストレーションシステムへのアクセスを制御します。これにより、攻撃者はクラスタ内のすべてのポッドやサービスにアクセスでき、内部ネットワークを横断移動できます。Dockerトークンは、コンテナイメージのプッシュ・プル権限を持ち、悪意のあるイメージを公式リポジトリに混入させる可能性があります。
悪意のあるコードの実行経路
攻撃は、PyTorchの依存パッケージとして偽装されたモジュールを通じて行われました。ユーザーが`pip install`コマンドを実行すると、正規のPyTorchパッケージと一緒に、悪意のあるサブモジュールもインストールされます。このモジュールは、インストール時に自動的に実行されるセットアップスクリプトを含んでいました。
セットアップスクリプトは、ユーザーのホームディレクトリや環境変数をスキャンし、特定のファイルパターン(例:`.ssh/id_rsa`, `.aws/credentials`, `.kube/config`)を検出します。検出されたファイルの内容を暗号化し、攻撃者の制御する外部サーバーに送信します。この過程はバックグラウンドで静かに実行されるため、ユーザーは気づきません。
さらに、この悪意のあるコードは、自分自身を削除する機能も備えていました。インストールが完了すると、ログに残らず、ファイルシステムから痕跡を消去します。そのため、通常のアンチウイルスソフトでは検知が困難でした。これは、高度な持続的脅威(APT)の手法を民衆レベルのライブラリに持ち込んだ例と言えます。
検知の難しさと発見のきっかけ
この攻撃が早期に発見されたのは、あるセキュリティ研究者が定期的に行っている依存関係の監査において、不審なネットワーク通信を検知したためです。通常、PyTorchパッケージはインターネット接続を必要としませんが、この悪意のあるバージョンは、インストール直後に外部IPアドレスへの接続を試みていました。
研究者は、パッケージのソースコードを解析し、暗号化されたデータ送信のコードを発見しました。さらに、ハッシュ値の照合により、公式リポジトリにアップロードされたパッケージが改ざんされていたことを確認しました。この発見は、すぐにコミュニティに共有され、大規模な調査へと発展しました。
しかし、発見されるまでに、世界中の何千もの開発環境が侵害されていた可能性があります。攻撃者は、検知されるまで短期間で大量の認証情報を収集しようとしたと考えられます。このスピード感は、現代のサプライチェーン攻撃の典型的な特徴です。発見が遅れるほど、被害は拡大していきます。
3. ローカルLLM環境への具体的な影響とリスク評価
依存関係の複雑さと脆弱性の連鎖
ローカルLLMを動かす環境は、単純ではありません。OllamaやLM Studioなどのフロントエンドツールは、バックエンドでllama.cppやPyTorch、ONNX Runtimeなどのライブラリを使用しています。また、画像生成ではStable Diffusion WebUIやComfyUIが、PyTorchを基盤としています。
これらのツールは、それぞれの依存パッケージを管理しています。しかし、すべての依存関係が厳密に監査されているわけではありません。特に、Pythonのpipエコシステムでは、パッケージの依存関係が深くなりやすく、間接的な依存パッケージから攻撃を受けるリスクがあります。PyTorchは、多くのAI関連パッケージの共通依存先であるため、攻撃の標的として最適でした。
もしあなたの環境で、この攻撃を受けたPyTorchパッケージがインストールされていれば、SSH鍵やAWS凭证が漏洩している可能性があります。特に、GitHub CopilotやCursorなどのAIコーディングツールを使用している場合、これらのツールが使用するAPIキーやトークンも危険にさらされています。
データ漏洩の可能性と二次被害
認証情報が漏洩したことで、攻撃者はあなたのアカウントを乗っ取ることができます。例えば、AWS凭证が漏洩すると、攻撃者はあなたのアカウントで高価なGPUインスタンスを起動し、暗号通貨のマイニングや、さらなる攻撃の踏み台と使う可能性があります。これにより、多額の請求が発生するリスクがあります。
また、Kubernetesの設定が漏洩すると、企業の内部ネットワークに侵入できます。ここで、機密データや顧客情報、知的財産であるAIモデルの重みが盗まれる可能性があります。さらに、Dockerトークンが漏洩すると、悪意のあるコンテナイメージをプッシュでき、他のユーザーにも攻撃を広げることができます。
ローカルLLMユーザーにとって、特に懸念されるのは、プロンプトデータやチャット履歴の漏洩です。これらのデータには、個人の情報や企業の機密が含まれている場合があります。攻撃者がこれらのデータにアクセスできれば、社会工学攻撃や標的型攻撃に利用されるリスクがあります。
パフォーマンスへの影響と環境の不安定化
悪意のあるコードが実行されると、システムリソースを消費する可能性があります。例えば、バックグラウンドで暗号化やデータ送信を行うプロセスが動くと、CPUやメモリ、ネットワーク帯域を占有します。これにより、LLMの推論速度が低下したり、システムがフリーズしたりする可能性があります。
また、ファイルの改ざんや削除により、環境が不安定になることもあります。重要な設定ファイルやライブラリが破壊されると、ツールが正常に動作しなくなります。これを「マルウェアによる環境破壊」と呼ぶことができます。復旧には、クリーンな環境からの再構築が必要になるため、多大な時間と労力がかかります。
さらに、信頼性の低下により、開発者のモラルや生産性が損なわれるという二次被害もあります。セキュリティへの不安から、新しいツールの導入や実験を避けるようになり、イノベーションの速度が低下する可能性があります。これは、オープンソースコミュニティ全体にとって大きな損失です。
4. 既存の防御策との比較と、なぜ従来の対策が効かなかったのか
アンチウイルスソフトの限界
多くのユーザーは、アンチウイルスソフトで保護されていると安心しています。しかし、今回の攻撃は、従来のアンチウイルスソフトの検知を回避するように設計されていました。なぜなら、悪意のあるコードは、正規のデジタル署名付きパッケージとして配布されていたからです。
アンチウイルスソフトは、既知のマルウェアの署名やパターンに基づいて検知を行います。しかし、今回の攻撃は、新しい手法であり、署名データベースに登録されていませんでした。また、コードは暗号化やパック化されており、静的解析では意図が分かりませんでした。実行時にのみ、悪意のある動作を行うように設計されていました。
さらに、アンチウイルスソフトは、システム全体を監視していますが、特定のアプリケーションの依存関係の詳細までは追跡できません。pipパッケージのインストール過程でのネットワーク通信やファイル操作を、リアルタイムで監査する機能は、一般的なアンチウイルスソフトには備わっていません。そのため、この攻撃は、アンチウイルスソフトの網を潜り抜けることができました。
依存関係監査ツールの役割と不足
SnykやDependabotなどの依存関係監査ツールは、既知の脆弱性を持つパッケージを検出するために広く使用されています。しかし、これらのツールは、CVE(Common Vulnerabilities and Exposures)データベースに登録された脆弱性に依存しています。
今回の攻撃は、新たな脆弱性ではなく、サプライチェーンの改ざんでした。つまり、パッケージ自体が悪意を持って作られたものであり、コードの脆弱性ではありませんでした。そのため、依存関係監査ツールは、この攻撃を検知できませんでした。ツールは、パッケージのバージョンやハッシュ値をチェックしますが、内容の意図までは解析しません。
また、これらのツールは、公開されたリポジトリの依存関係を主に監視しています。プライベートリポジトリや、ローカル環境での依存関係の監査は、限定的です。特に、ローカルLLMユーザーのように、個人が管理する環境では、これらのツールが十分に活用されていない傾向があります。これが、検知の遅れにつながりました。
| 防御策 | 検知能力 | 今回の攻撃への有効性 | 備考 |
|---|---|---|---|
| アンチウイルスソフト | 中 | 低い | 署名付きパッケージの検知が困難 |
| 依存関係監査ツール | 高 | 低い | 既知の脆弱性のみ検知 |
| ネットワーク監視 | 中 | 中 | 不審な通信の検知が可能 |
| ファイル整合性監視 | 高 | 中 | 改ざんの検知が可能だが、初期感染時は困難 |
| ゼロトラストアーキテクチャ | 高 | 高い | 最小権限の付与により被害を限定 |
ゼロトラストアーキテクチャの重要性
この攻撃から学べる重要な教訓は、ゼロトラストアーキテクチャの採用です。ゼロトラストは、「内部ネットワークも信頼しない」という前提に基づき、すべてのアクセスを厳密に認証・認可するセキュリティモデルです。
もしゼロトラストが導入されていれば、悪意のあるコードが認証情報を取得しても、外部への送信や他のシステムへのアクセスが制限されます。例えば、AWS凭证の使用は、特定のIPアドレスやロールからのみ許可されます。また、SSH鍵の使用も、多要素認証(MFA)と組み合わされるため、鍵の漏洩だけではアクセスできません。
さらに、最小権限の原則により、各プロセスやユーザーに必要な権限のみが付与されます。これにより、悪意のあるコードが実行されたとしても、被害が限定されます。例えば、PyTorchパッケージには、ネットワークへのアクセス権限や、システムファイルへの書き込み権限は不要です。これらの権限を制限することで、攻撃の影響を最小限に抑えることができます。
5. 技術的な深掘り:攻撃コードの解析と検出手法
悪意のあるセットアップスクリプトの構造
解析の結果、悪意のあるセットアップスクリプトは、Pythonの`setup.py`ファイル内に埋め込まれていました。このファイルは、パッケージのインストール時に実行されます。スクリプトは、まず、ユーザーのホームディレクトリを特定し、その後、特定のファイルパターンを検索します。
検索対象は、`.ssh/id_rsa`、`.aws/credentials`、`.kube/config`、`.docker/config.json`など、認証情報や設定ファイルが保存される一般的なパスです。これらのファイルが見つかった場合、スクリプトはファイルの内容を読み取り、AES暗号で暗号化します。
暗号化されたデータは、HTTP POSTリクエストを使用して、攻撃者の制御する外部サーバーに送信されます。送信後、スクリプトは自分自身を削除し、ログをクリアします。この一連の動作は、数秒以内に完了するため、ユーザーは気づきません。また、エラーが発生しても、インストールプロセスを中断しないように設計されています。
検知のためのネットワーク監視設定
この攻撃を検知するためには、ネットワーク監視が有効です。特に、パッケージインストール時の不審なネットワーク通信を監視することが重要です。PyTorchのようなライブラリは、通常、インストール時にインターネット接続を必要としません。そのため、インストール直後の外部通信は、不審と見なすことができます。
以下は、Linux環境でネットワーク通信を監視するためのコマンド例です。`tcpdump`コマンドを使用して、特定のポートやIPアドレスへの通信をキャプチャできます。これにより、悪意のあるコードが外部と通信しているかどうかを確認できます。
# PyTorchインストール時のネットワーク通信を監視
sudo tcpdump -i any -w pytorch_traffic.pcap host <your_ip> and port 443
# 監視結果の解析
tcpdump -r pytorch_traffic.pcap -nn -v
また、WiresharkなどのGUIツールを使用すると、より詳細な解析が可能です。HTTPリクエストのヘッダーやボディを確認し、不審なデータ送信がないかチェックします。特に、暗号化されたデータや、不明なドメインへの接続には注意が必要です。これらの監視ログは、インシデント発生時の調査にも役立ちます。
ファイル整合性監視の導入
ファイル整合性監視(FIM)ツールを使用すると、ファイルの改ざんや削除を検知できます。この攻撃では、悪意のあるコードが自分自身を削除するため、ファイルの消失を検知することが重要です。
AIDE(Advanced Intrusion Detection Environment)やTripwireなどのツールを導入し、重要なファイルやディレクトリのハッシュ値を定期的にチェックします。これにより、予期しない変更を検知できます。特に、`.ssh`ディレクトリや、`.aws`ディレクトリなど、認証情報が保存される場所は重点的に監視します。
また、Gitを使用して、設定ファイルの変更履歴を管理することも有効です。Gitは、ファイルの変更を記録するため、誰が、いつ、どのような変更を行ったかを追跡できます。これにより、不正な変更を早期に発見できます。これらの対策を組み合わせることで、サプライチェーン攻撃に対する防御力を高めることができます。
6. メリット・デメリット:厳格なセキュリティ対策の現実的な評価
セキュリティ強化のメリット
厳格なセキュリティ対策を導入することで、サプライチェーン攻撃のような高度な脅威から環境を守ることができます。特に、認証情報の漏洩を防ぐことは、データ漏洩や不正アクセスによる被害を最小限に抑えるために不可欠です。
また、ゼロトラストアーキテクチャの導入により、内部脅威や横断移動のリスクも低減できます。最小権限の原則により、悪意のあるコードが実行されたとしても、被害が限定されます。これにより、システムの安定性や信頼性が向上します。
さらに、セキュリティ意識の向上により、開発者のスキルや知識も向上します。セキュリティベストプラクティスを学ぶことで、より安全なコードを書くことができます。これは、長期的には、ソフトウェアの品質や信頼性を高めることにつながります。
導入コストと運用の複雑さ
しかし、厳格なセキュリティ対策には、導入コストと運用の複雑さというデメリットもあります。ゼロトラストアーキテクチャの構築には、多大な時間とリソースが必要です。また、既存のシステムとの統合も容易ではありません。
さらに、監視ツールやFIMツールの導入により、システムのパフォーマンスが低下する可能性があります。特に、リアルタイムのファイル監視やネットワーク監視は、CPUやメモリを消費します。これにより、LLMの推論速度や開発者の生産性が低下するリスクがあります。
また、セキュリティポリシーの厳格化により、開発者の利便性が損なわれる可能性があります。例えば、多要素認証の強制や、アクセス権限の制限により、作業の手間が増えます。これにより、開発者のモチベーションが低下する可能性があります。これらのトレードオフを考慮し、適切なバランスを見つけることが重要です。
個人開発者への影響
個人開発者や小規模チームにとって、これらのセキュリティ対策の導入は、さらに困難です。限られたリソースの中で、セキュリティと利便性のバランスを取る必要があります。特に、ローカルLLMユーザーのように、個人が管理する環境では、専門的なセキュリティ知識やツールが不足している場合があります。
しかし、個人開発者でも、基本的なセキュリティ対策は可能です。例えば、依存パッケージのハッシュ値をチェックしたり、ネットワーク通信を監視したりすることは、比較的容易です。また、オープンソースのセキュリティツールを活用することで、コストを抑えながら防御力を高めることができます。
さらに、コミュニティの情報共有やベストプラクティスの共有により、個人開発者のセキュリティ意識を高めることができます。今回のPyTorch攻撃のように、サプライチェーン攻撃は、個人開発者も標的にします。そのため、個人開発者も、セキュリティ対策を怠ってはいけません。
7. 実践ガイド:ローカルLLM環境を守るための具体的な手順
依存パッケージのハッシュ値チェック
まず、依存パッケージのハッシュ値をチェックすることが重要です。pipパッケージをインストールする際、ハッシュ値を指定することで、改ざんされたパッケージをインストールしないようにできます。これは、`–require-hashes`オプションを使用することで実現できます。
以下は、ハッシュ値を指定してパッケージをインストールするコマンド例です。ハッシュ値は、公式リポジトリや信頼できるソースから取得します。これにより、パッケージの整合性を確認できます。
# ハッシュ値を指定してPyTorchをインストール
pip install torch==2.0.0 --require-hashes --hash=sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
また、`pip freeze`コマンドを使用して、インストールされているパッケージのバージョンとハッシュ値を確認できます。これにより、現在インストールされているパッケージが、公式のハッシュ値と一致しているかどうかを確認できます。定期的にこのチェックを行うことで、改ざんされたパッケージを早期に発見できます。
ネットワーク通信の制限
次に、ネットワーク通信を制限することが有効です。PyTorchのようなライブラリは、インストール時にインターネット接続を必要としません。そのため、インストール時にネットワーク接続を制限することで、悪意のあるコードの外部通信を防ぐことができます。
Linux環境では、`iptables`や`ufw`などのファイアウォールツールを使用して、ネットワーク通信を制限できます。以下は、PyTorchインストール時にネットワーク接続をブロックするコマンド例です。
# PyTorchインストール時にネットワーク接続をブロック
sudo iptables -A OUTPUT -p tcp --dport 443 -j DROP
# PyTorchのインストール
pip install torch
# ネットワーク接続を再開
sudo iptables -D OUTPUT -p tcp --dport 443 -j DROP
また、Dockerコンテナ内でインストールを行う場合、`–network=none`オプションを使用して、ネットワーク接続を完全に遮断できます。これにより、悪意のあるコードが外部と通信することを防げます。これらの制限を組み合わせることで、ネットワーク経由の攻撃を効果的に防げます。
認証情報の保護と最小権限の適用
最後に、認証情報の保護と最小権限の適用が重要です。SSH鍵やAWS凭证などは、暗号化されたストレージや、専用のシークレットマネージャーに保存します。これにより、認証情報の漏洩を防げます。
また、最小権限の原則を適用し、各プロセスやユーザーに必要な権限のみを付与します。例えば、PyTorchパッケージには、ネットワークへのアクセス権限や、システムファイルへの書き込み権限は不要です。これらの権限を制限することで、攻撃の影響を最小限に抑えられます。
さらに、多要素認証(MFA)を強制し、SSH鍵の使用にはMFAを組み合わせてください。これにより、鍵の漏洩だけではアクセスできないようにできます。これらの対策を組み合わせることで、ローカルLLM環境を安全に保つことができます。
8. まとめ:信頼の再構築と今後の展望
サプライチェーンセキュリティの再認識
今回のPyTorch攻撃は、サプライチェーンセキュリティの重要性を再認識させました。オープンソースエコシステムは、信頼に基づいて成り立っていますが、その信頼は脆いものです。開発者は、依存パッケージの安全性を常に監視し、厳格なセキュリティ対策を講じる必要があります。
また、コミュニティの情報共有やベストプラクティスの共有が、セキュリティの向上に不可欠です。今回の攻撃のように、サプライチェーン攻撃は、個人開発者も標的にします。そのため、個人開発者も、セキュリティ対策を怠ってはいけません。
さらに、ツールやフレームワークの開発者は、セキュリティを最優先事項とすべきです。パッケージの署名やハッシュ値の検証、依存関係の監査など、セキュリティ機能の強化が必要です。これにより、ユーザーの信頼を回復し、オープンソースエコシステムの健全性を保つことができます。
ローカルLLMの未来とセキュリティのバランス
ローカルLLMは、プライバシーの保護やコスト削減、カスタマイズ性などのメリットから、今後さらに普及すると予想されます。しかし、その普及に伴い、セキュリティリスクも高まります。特に、サプライチェーン攻撃のような高度な脅威から、ローカル環境を守る必要があります。
そのため、セキュリティと利便性のバランスを取ることが重要です。厳格なセキュリティ対策を導入することで、セキュリティを高めつつ、開発者の利便性を損なわないようにする必要があります。また、オープンソースのセキュリティツールを活用し、コストを抑えながら防御力を高めることができます。
最後に、読者には、自身のローカルLLM環境のセキュリティを見直すことをお勧めします。依存パッケージのハッシュ値をチェックし、ネットワーク通信を監視し、認証情報を保護してください。これにより、安全かつ快適にローカルLLMを運用できます。セキュリティは、一度きりの作業ではなく、継続的なプロセスです。常に最新の脅威情報を入手し、対策を更新してください。
行動への呼びかけ
この記事を読んだあなたは今、自分の環境を振り返っているかもしれません。もし、PyTorchや関連パッケージを最近インストールしていたら、一度、依存関係の監査を行ってみてください。不審なネットワーク通信やファイルの変更がないか確認してください。
また、セキュリティコミュニティに参加し、情報を共有することも重要です。今回のような攻撃は、個人では対応が困難です。コミュニティの力により、脅威を早期に発見し、対策を講じることができます。あなたの経験や知識を共有し、他の開発者を助けてください。
ローカルLLMの未来は、セキュリティの向上にかかっています。安全な環境を整えることで、より自由に、創造的にAIを活用できます。共に、安全でオープンなAIエコシステムを築いていきましょう。
📰 参照元
The PyTorch attack targeted SSH keys, AWS credentials, Kubernetes configs, Docker tokens …
※この記事は海外ニュースを元に日本向けに再構成したものです。
📦 この記事で紹介した商品
- ゼロから作るDeep Learning → Amazonで見る
- 実践 自然言語処理 → Amazonで見る
- RAG実践ガイド → Amazonで見る
- Samsung 990 PRO 2TB NVMe SSD → Amazonで見る
- Logitech MX Master 3S ワイヤレスマウス 8K DPI → Amazonで見る
※ 上記リンクはAmazonアソシエイトリンクです。購入いただくと当サイトに紹介料が入ります。

