Seleniumを使ってAmazonの二段階認証を合法的に突破してみた
- 物品の購入IDを入力値として、Amazonの購入リストからそのIDに一致する購入の請求書などをダウンロードできるようにした
- ログインを突破する方法は大きく分けて2通りある
- 手動でログインしたブラウザを事前に用意して、セッション情報をSeleniumで開いたブラウザにつなげる
- Seleniumで頑張ってログインを突破する
最終的にAWS Lambda上でSeleniumを動かしたいので、Seleniumで頑張ってログインを突破する設計を行った。
その際に苦労したのが、SMS認証や2段階認証をどのように突破するかということである。
Amazonのアカウント登録の時点で電話番号を求められ、自動的にSMS認証は行わなければならないようだった。
(もしかしたらあとからSMS認証を削除できるかもしれないが、セキュリティ的に危ないのでやりたくはない)
実装したこと
Section titled “実装したこと”Amazon.co.jpにアクセスして、以下の動作を自動で行えるようにした。
- ログインメールとパスワードを入力
- 2段階認証を突破する
- 「購入履歴」をクリックする
- 物品IDと一致する履歴を探索する
- 請求書などをダウンロードする
2段階認証を突破するためには
Section titled “2段階認証を突破するためには”Amazonでは、AuthenticatorアプリによるOTPを発行することで2段階認証を行う。
PythonでAuthenticatorアプリを自作することで、Seleniumで2段階認証を突破できた。
Authenticatorアプリの仕組み
Section titled “Authenticatorアプリの仕組み”Authenticatorアプリでは、サイトから発行されるQRコードを読み込むことで、それに対応したOTPを表示している。
QRコードに埋め込まれたシークレットアルゴリズムを元にして、現在時刻に対応したパスワードを生成する。
→ PythonでQRコードを解析してシークレットアルゴリズムを手に入れることで、プログラム上でパスワードを生成できるようになる!
プログラムについて
Section titled “プログラムについて”pyotp
ライブラリでOTPを生成できる。- QRコードに埋め込まれたシークレットキーが必要
- QRコードの解析は
zbar
ライブラリ(brew install zbar
)で簡単に行える - Seleniumで2段階認証のOTPを入力する
- 2段階認証を突破できる!!!