コンテンツにスキップ

Seleniumを使ってAmazonの二段階認証を合法的に突破してみた

  • 物品の購入IDを入力値として、Amazonの購入リストからそのIDに一致する購入の請求書などをダウンロードできるようにした
  • ログインを突破する方法は大きく分けて2通りある
    • 手動でログインしたブラウザを事前に用意して、セッション情報をSeleniumで開いたブラウザにつなげる
    • Seleniumで頑張ってログインを突破する

最終的にAWS Lambda上でSeleniumを動かしたいので、Seleniumで頑張ってログインを突破する設計を行った。

その際に苦労したのが、SMS認証や2段階認証をどのように突破するかということである。

Amazonのアカウント登録の時点で電話番号を求められ、自動的にSMS認証は行わなければならないようだった。

(もしかしたらあとからSMS認証を削除できるかもしれないが、セキュリティ的に危ないのでやりたくはない)

Amazon.co.jpにアクセスして、以下の動作を自動で行えるようにした。

  1. ログインメールとパスワードを入力
  2. 2段階認証を突破する
  3. 「購入履歴」をクリックする
  4. 物品IDと一致する履歴を探索する
  5. 請求書などをダウンロードする

Amazonでは、AuthenticatorアプリによるOTPを発行することで2段階認証を行う。

PythonでAuthenticatorアプリを自作することで、Seleniumで2段階認証を突破できた。

認証アプリとその仕組みとは?

Authenticatorアプリでは、サイトから発行されるQRコードを読み込むことで、それに対応したOTPを表示している。

QRコードに埋め込まれたシークレットアルゴリズムを元にして、現在時刻に対応したパスワードを生成する。

→ PythonでQRコードを解析してシークレットアルゴリズムを手に入れることで、プログラム上でパスワードを生成できるようになる!

  • pyotp ライブラリでOTPを生成できる。
    • QRコードに埋め込まれたシークレットキーが必要
  • QRコードの解析はzbar ライブラリ(brew install zbar)で簡単に行える
  • Seleniumで2段階認証のOTPを入力する
  • 2段階認証を突破できる!!!