
iPhoneを使っている人であれば、AppleIDが突然パスワード強制変更されてアカウントがロクされるというメールを受け取った事がある人もいるようです。
厳しいセキュリティポリシーを設けているログインサイトでは、パスワードの間違いが指定回数を超えると、アカウントがロックされて不正利用を防ぐとともに、再度パスワードを登録しなければ利用できなくなるという事象です。
パスワード攻撃によるこうした事態は、サービス提供側も考えなければ、こうした手口を利用した新たな不正も考えられるので、詐欺の手助けになる可能性も無くはないですね。
そして、もっともおせっかいなセキュリティ仕様は、以前に使ったパスワードはもう二度と使えなくなるという、パスワード再登録が、極めてパスワードを忘れさせる原因の要因になっているようです。
まったく一体、どんだけの数のパスワードを管理しなければならないのか、この先を考えると恐ろしい記憶料が必要になりそうです。
そんなセキュリティ対策に号を煮やしている人も多い中、今回は、実際のログイン画面での人がログインしようとしているのか、機械が行っているのかを判別してみたいと思います。
この判定を「AIで行う」という魅力的なサービスもあるようですが、世の中的に広がっておらず、リスト型攻撃が減らないのは、高単価なのか、結果が伴わないのか、どちらか分からないのですが、シンプルにアルゴリズムでどこまでできるかを追求してみたいと思います。
各種イベントによる判定
人と機械の挙動を判別するには、マウス操作やそれぞれの座標などの正確性を正誤判定するだけでかなりの効力がありそうです。
1. 総合的なマウスの動き

WEBサイトのログインを行う場合を考えると、まずは、ログインIDやメールアドレスとパスワードを入力するために、パソコンを使う場合は、マウスを使って画面のカーソルを動かしてそれぞれの項目へ移動するという操作が考えられます。
機械の場合は、こうした操作を行うパターンは少なく、レンダリング対応したクローリングの場合であればカーソル操作をして、より人の操作に近い情報を扱うことでより人っぽさを出そうとしますが、
多くの場合は、指定した座標にカーソルを移動させてクリックや文字入力のアクションをさせるというやり方がほとんどのため、マウス座標が人と機械の違いがかなり明確に出るポイントになります。
2. 入力項目へのアタッチ

次に必ず発生するイベントとしては、ログインするために入力するIDやメール、パスワードといった項目へのアタッチ、デタッチイベントです。
入力フォームに対する"focus"イベントや"blur"イベントに当たりますが、実際のイベントでは、マウスで行った場合に、マウス座標も同時に取得することができます。
簡単に考えると、アタッチ時のマウス座標によって人と機械の判定は容易にできそうです。
そもそも機械の場合は、アタッチイベント無しで入力項目の書き換えなどができてしまうので、この施策はかなり有効であると考えられます。
3. 入力キータッチ

実際に入力する時は、キータッチイベントが発生します。
機械の場合は、アタッチイベントと同じく、value値を代入するだけがほとんどのため、キーイベントが無く文字が入力されているのは機械操作と考えるのが自然でもあります。
仮に機械でキーイベントを付与しようとすると、keydown , keyup , keypressなどのイベントをそのタイミングで処理しなければならないので、それを人のランダム性の高いタイミングで行うというのは、中々しんどいプログラムで有ることを考えると、かなり有効な手段ですね。
4. 送信ボタンクリック挙動

送信ボタンクリックイベントは、これまでの流れと同じで「座標」と「クリックイベント」がポイントになります。
送信ボタンの位置まで移動するマウスカーソルの軌道や、ボタンクリックをするボタンイベント(down , up , press , move)などが必ず発生していることを考えると、これらのイベントが欠如している場合、かなりの確率で機械操作であると考えられます。
想定外操作の対応
人の動きとイベントログで判別する方法を検討してみましたが、人が行う作業で、こうしたイベントを発生させずに、ログインができてしまう自称はないのでしょうか?
世の中には、パソコンを使っているのに、マウスを使わないという種別の人がいます。
プログラマーなどは、マースいらずでキーボードだけで入力をしてホームページもカーソルでページスクロールしたりするケースもあるようです。
そんなマウス軌道を一切発生させずにログインしようとしすると、機械と判断されることは回避しなければいけません。
以下のような事象を例外として仕様に加えて置かなければ行けないという事ですね。
1. tabキー操作による項目アタッチ
ブラウザでtabキーを押すと、開いているページのリンク箇所や、入力フォーム、ボタンなど、クリックできる箇所にカーソルが移動します。
この操作方法で、入力フォームへのログイン操作を行う人はまれにいるため、マウス軌道が無くても項目アタッチイベント(アタッチ座標も含まれません)のみで判断しなければいけません。
ただ、この場合は、キーボード操作イベントの判別で制度を上げることは可能です。
人が操作するキーイベントは、必ずdown,upなどのイベントがセットになっている為、入力操作も合わせて判別するのが良さそうです。
そういえば、利便性を考えてログインページを開いた時に、ログイン項目にカーソルを当てているサイトがありますが、そうしたサイトはこの判定は期待できませんね。
利便性とセキュリティは背と腹であることがよくわかります。
2. オートコンプリート
最近はブラウザなどの機能により、ログインページのIDとパスワードをブラウザ側やOSなどで記憶してくれていて、同じドメインの入力フォームや、password項目を含むページであれば、以前の入力内容をそのまま反映して入力完了しているというケースがあります。
こうした場合を考えると、入力だけの判別にしてしまうと、オートコンプリート対応してしまうと、人が行ってもロボット操作と判別されてしまうので、その場合は送信ボタン判定のみで行うのがいいでしょう。
3. スマホの場合
最も考えなければ行けない点として、これまでパソコンのマウス操作イベントやキーボードイベントでの判別を検討してきましたが、世の中的には50%以上がスマートフォンで見られている事を考えると、スマートフォン操作も十分に考えて置かなければいけません。
マウスイベントも、キーボードイベントも、パソコンとスマートフォンでは全く異なる(または無い)為、新たな方法を考えなければいけないのですが、スマートフォン特有な操作として「タッチイベント」という値でマウス操作と似たような判定ができるので、この点をセットで考えるのが良さそうです。
ちなみに、ゲーム機器などのブラウザによる操作はコントローラなどによるイベントになるので、これは一般的ではないという事で除外してもいいかもしれませんね。
※UAで除外するか、必要に応じてイベント思考を追加するレベルです。
判定に使えそうなイベント一覧
以下のイベントを使って数値判別をする事で判定が行えます。
pc
mousemove
mousedown
mouseup
mouseover
mouseout
keydown
keyup
keypress
click
focus
blur
スマートフォン
touchstart
touchend
touchmove
click
focus
blur
0 件のコメント:
コメントを投稿