Anti-Fraud Developer’s Guide

概要

毎年、世界中で電信電話に関係する不正行為により数百億ドルが失われています。 顧客の皆様を保護するため、Twilioでは弊社の通信プラットフォームの不正使用を予防措置的かつ自動で検出するためにデザインされた内部システムを備えています。

不正利用を検出した場合、影響を受けたお客様にただちにご連絡いたします。ただし、Twilio は柔軟性がある強力なプログラマブル通信プラットフォームなので、新手の詐欺の手口が生まれる可能性が高まります。開発者は、現在存在し、お客様のアプリケーションが被害を受けやすい通信詐欺の形態を認識する必要があります。

このドキュメントは、ハッカーや詐欺師が不正にアクセスして詐欺を働くことができないようなアプリケーションを構築する Twilio 開発者を支援することを目的としています。そのような行為は、Twilio アプリケーションを開発する方法やアカウントを管理する方法によって、防ぐことができます。

このドキュメントでは、下記項目についてのベストプラクティス、不正行為のシナリオ、また対不正行為のための実践の概略について説明しています。

  1. アカウントレベルの保護
  2. アプリケーションレベルの保護
  3. SIPトランク
  4. Programmable SMS
  5. 電話番号
  6. 不正行為が疑われた際にすべきこと

アカウントレベルの保護

詐欺師は、正しく実践されていないセキュリティを見つけて利用します。したがって、コードの作成を開始する前に Twilio コンソールで次の手順を実行して Twilio アカウントを厳重に防御することによって、不正利用を防ぐことができます。

  • パスワードマネージャーを使用する。このようなツールを使用することによって、複雑なパスワードを生成して暗号化し、安全に保存して、必要なときに使用できるようにすることができます。特定の製品を推奨することはできませんが、このリストに載っている製品を調査することを推奨します。
  • 二要素認証を有効にする。二要素認証(2FA)は、ログイン時の検証(1 回目)とモバイル機器からの検証(2 回目)により、ユーザーのアイデンティティを決定します。こうすることで、詐欺師が盗んだアカウントクレデンシャルを利用してアカウントに不正アクセスすることが、はるかに難しくなります。Twilio コンソールで、2FA を必要とするようにアカウントを設定できます。2FA が有効な場合、SMS によりワンタイムトークンとして認証コードが送信されます。アカウントにログインする際にこのコードを指定しないと、ログインできません。
  • 認証トークンと API キーを秘密にする。アカウント SID と認証トークンを指定すると、誰でもそのアカウントとして API リクエストを送信できます。認証トークンまたは API キーが漏洩した疑いがある場合は、いつでもそれらを新しく生成できます。認証トークンと API キーの変更方法については、『Auth Tokens and How to Change Them』の記事および「REST API: API キー」をご覧ください。
  • 発信通話を無効にする。誰かからかかってきた着信通話を受信するだけのアプリケーションの場合、発信ダイヤルパーミッションを無効にすることを推奨します。これにより、料金の高い国際電話にトラフィックポンピングされるリスクが解消されます(後述の「Programmable Voice を利用する詐欺のシナリオ」をご覧ください)。音声の地理による使用許可を監査して、発信先として想定されている国への発信のみに制限し、それ以外の国への発信をブロックします。アプリケーションから国際通話を発信する必要がある場合、コールトラフィックを想定している宛先へのルートのみを有効にすることを推奨します。
  • 発信 SMS を無効にする。同様に、SMS メッセージを送信する必要がないアプリケーションの場合、Twilio コンソールで SMS の地理による使用許可をグローバルに無効にすることによって、アカウントの発信 SMS を無効にすることができます。
  • 利用限度トリガーを実装する。 利用限度トリガーを設定して、事前定義されている利用条件が満たされた場合に、指定したコールバック URL への webhook を送信できます。たとえば、1 日の課金額が 30 ドルを超えた場合または通話時間が長すぎる場合に利用限度トリガーを発動させて、サブアカウントを一時停止することができます。疑わしい利用状況が通知されるようにすることで、詐欺行為の防止に役立ちます。

アプリケーションレベルの保護

アカウントを保護したら、次はアプリケーション自体を確実に保護する必要があります。このセクションでは、発生する可能性がある詐欺のタイプと実践可能な防御策について、製品ごとに分類して説明します。

Programmable Voice

Twilio のプログラマブル Voice 製品に関連して最も一般的に目にする通信詐欺は、トラフィックポンピングとして知られる料金詐欺です。Twilio のプラットフォームからユーザーのアカウントで通話を発信するこれらの詐欺は、国際キャリアや番号再販業者から取得したプレミアムレート番号(PRN)など、詐欺師が所有する料金の高い宛先に、コールトラフィックを転送します。

よく目にする不正宛先の上位 10 件を次に示します。

  1. ラトビア
  2. リトアニア
  3. セルビア
  4. ソマリア
  5. コンゴ
  6. 太平洋/カリブ諸島
  7. チャド
  8. ガンビア
  9. シエラレオネ
  10. ギニア

通常は、自動音声録音が通話に応答して、この通話が詐欺であることが気付かれないように、会話パターンを続けるか、単純に無音になります。キャリア(不正利用を認識しているかどうかは不明)は、その番号への通話によって生み出される利益を詐欺師と山分けします。

この料金は、発信番号の所有者に請求されます。したがって、番号の所有者が詐欺の被害者になります。詐欺師は、スクリプトやボットを使用して、わずか数分の間に膨大な量のトラフィックを生成します。料金は分単位で発生するので、各通話の通話時間が長くなるほど、詐欺師の稼ぎが多くなります。

詐欺のシナリオ

トラフィックポンピングに利用されるアプリケーションレベルの弱点の例を次に示します。

  • サインアップフロー。このマルチテナントシナリオでは、詐欺師はユーザーアプリケーションを使用して 1 つまたは複数の Twilio サブアカウントを作成し、それらを利用して国際通話を発信するアクセス権限を取得します。次に、ユーザーのアカウントで通話を発信します。このような通話は、詐欺師が通話量や通話時間を自動制御できるように、スクリプトによって生成される場合があります。
  • アカウント認証。Twilio を使用して、音声認証による 2FA を実装している場合、トラフィックポンピングに利用される可能性があります。この攻撃は、SQL インジェクションに似ています。サインアップフローと同様に、大量のコールトラフィックを生成するためにスクリプトが使用される場合があります。
  • 無料電話。詐欺師がユーザーの無料番号に対してトラフィックポンピングを行った場合に発生します。これにより、通話パスに含まれる 1 つまたは複数のキャリアから利益を得ることができます。この手法は、ユーザーを困らせて、特定のバニティ番号を手放させるために使用する場合もあります(後述の「TDoS」をご覧ください)。

詐欺防止の実践

  • フォームフィールドを検証する。電話番号を入力するフィールドを検証して、料金の高いルートへの番号をフォームで入力できないことを確認します。国発信コードと通話プレフィックスでフィルタリングことによって、そのような番号の入力を防止できます。
  • Authy 2FA を使用する。アプリケーションのユーザーのログインクレデンシャルは、他人から見えるところに貼られている付箋紙にメモされている場合など、さまざまな方法で漏洩する可能性があります。アプリケーションの開発者はそれをどうすることもできません。漏洩してしまうと、詐欺師がそのアプリケーションを利用して詐欺を働くことができます。しかし、アプリケーションが Authy 2FA を実装している場合は、ユーザーログイン時に、詐欺師がアクセスできないユーザーのモバイル機器という 2 番目の要素が必要になります。これがないと、詐欺師はログインして詐欺を働くことができません。方法については、Authy の「Tutorials」をご覧ください。
  • 送信制限を実装する。アプリケーションで、Twilio に送信する通話リクエストのペースを制御できます。たとえば、nginx を使用して送信を制限することができます。また、この Stack Overflow の記事では、Python で送信制限アルゴリズムを実装する方法について議論しています。これにより、詐欺に遭う可能性を減らすことができます。

SIPトランク

PBX で Twilio の SIP トランク製品を使用している場合、最も一般的に目にする通信詐欺は、PBX ハッキングが原因です。詐欺師は、詐欺を働くために、まず PBX をハッキングして、PBX へのアクセスを取得する必要があります。たとえば、PBX 上のポートをスイープして、開いているポートを利用してシステムに侵入します。また、PBX から SIP クレデンシャルを取得して不正利用する場合もあります。他のシステム脆弱性も同じように利用される可能性があります。

詐欺のシナリオ

  • 基本通話ポンピング。PBXに侵入した詐欺師は、PBXを再設定して国際通話発信の制御を取得することができます。これにより、このPBXからトラフィックポンピングを発信できるようになります。この詐欺のシナリオは、コールトラフィックの発信元がTwilioアプリケーションではなくPBXであるという事実を除けば、上述の「Programmable Voice」で説明したシナリオに似ています。これらのシナリオでは、詐欺師はTwilioアカウントから詐欺師が所有する料金の高い宛先に大量のコールトラフィックを送信します。
  • 通話転送。詐欺師は、PBX へのアクセスを取得するとすぐに、料金の高い宛先への通話転送を設定します。次に、この PBX への通話を生成します。すると、Twilio SIP トランクによって自動的に、それらが料金の高い宛先に転送されます。
  • マルチ転送。これは、さらに高度な形式の通話転送攻撃です。この場合、料金の高い宛先に転送された通話は、PBX によって次に料金の高い宛先に転送されます。この接続は Twilio によって管理され、ユーザーのアカウントに請求されます。この通話は、最大 4 時間アクティブに維持された後、自動的に終了します。詐欺師はこれを繰り返すことによって、数百~数千の通話を生成できます。
  • 中間者攻撃。音声通話は、メディアとして RTP プロトコルを使用します。攻撃者が侵入した機械の制御を取得した場合、RTP ストリームの複製を自分の目的のために透過的にストリーミングできます。
  • 電話サービス妨害(TDoS)。コールセンターアプリケーションを実行している場合、攻撃者が膨大な量のトラフィックをその番号に送信してシステムを停止させ、正当な通話を受信できないようにすることができます。これにより、サービスの壊滅的損失が発生する可能性があります。

詐欺防止の実践

実行可能な最も重要な詐欺防止の実践は、PBX を保護することです。推奨する実践を次に示します。

  • PBX のセキュリティのベストプラクティスを実践する。次に例を示します。
    • デフォルトのパスワードを変更します。詐欺師は最も広く知られている PBX のデフォルトのパスワードを試します。
    • PBX をファイアウォールで保護します。iptables などのソフトウェアベースのファイアウォールを使用して、不要なポートをすべて閉じます。これは、内部のプライベートネットワークからの攻撃の防止に役立ちます。さらに、ハードウェアベースのファイアウォールを使用して、ポートを制限し、IP アドレスのホワイトリストを設定することによって、公衆インターネットからの攻撃から保護します。
    • PBX の管理作業はすべて HTTPS 経由で実行します。これにより、データがプレーンテキストで転送されるのを防止できます。
  • SIP セキュリティのベストプラクティスを実践する。詳細については、この記事をご覧ください。次に例を示します。
    • SIP クレデンシャルを使用して IP ホワイトリストを設定します。これにより、指定された IP アドレスリスト以外からは、ユーザーのアカウントを SIP トランクに使用できなくなります。
    • SIP シグナリングの TLS を有効にします。SIP トラフィックを暗号化することによって、転送時のデータを保護します。
    • メディアトラフィックの SRTP を有効にします。SRTP は、ペイロードのオーバーヘッドが最小であり、RTP パケットストリーム全体の完全性を保護する(中間者攻撃は成功できない)とともに、キャプチャしたパケットのリプレイを防止します。
    • 記事で説明されているセキュアなアプリケーションデザインを実践します。
  • SIP アラートトリガーを作成する。このトリガーを使用して、ユーザーが疑わしい方法でシステムを操作した場合にアラートを送信するようにできます(トリガーを設定できるエラーの完全なリストについては、こちらをご覧ください)。SIP 料金詐欺の防止に役立つトリガーの例を次に示します。
    • 32201:SIP:ソース IP アドレスが ACL にありません
    • 32202:SIP:不正なユーザークレデンシャル
    • 32203:SIP:電話番号がブラックリストに入っています
  • TDoS 緩和策を採用する。これらの製品は、TDoS によってサービスが中断しないように設計されています。特定の製品を推奨することはできませんが、複数のベンダーから多くの製品が提供されています。

Programmable SMS

音声ベースの通信詐欺ほど一般的ではありませんが、SMS 詐欺は実際に行われており、詐欺師によってアカウントが利用される可能性があります。 

この場合、主に詐欺の種類はフィッシングです。フィッシングメッセージは、受信者の取引銀行、小売店、または友人から送信されたように見える偽の SMS メッセージであり、信頼できるソースから来たように装うことができます(例:「お客様の Pay-pal アカウントに関する重要なセキュリティアラートです。http://bogusphishinglink をクリックしてください」)。これらのメッセージには必ずコールツーアクション(ハイパーリンクや電話番号など)が記載されており、通常は個人情報を漏らすように受信者にわなを仕掛けることを目的としています。記載されているハイパーリンクは URL 短縮ツールで圧縮されていて、クリックしてみないと実際にどこに移動するのかを知ることができません。

メッセージ自体から感じられる緊迫感のせいで、メールの場合に比べて、コールツーアクションを実行する可能性がはるかに高く、即応性も高いので、SMS フィッシングは効果が非常に高くなる可能性があります。ユーザーのアカウントへのアクセスを取得した詐欺師は、膨大な量のメッセージを被害者に送信できます。これらのメッセージの使用料金はそのユーザーに請求され、メッセージはそのユーザーから送信されたように見えます。このユーザーの番号は、受信者のキャリアによってスパムのブラックリストに入れられる可能性があります。

詐欺のシナリオ

  • 発信フィッシング。アプリケーションは、ハッキングされた場合、発信スパム/フィッシングメッセージをその被害者に送信するために使用される可能性があります。または(たとえば)アプリケーションがユーザーに任意の番号を入力して任意のメッセージを送信することを許可している場合、詐欺師は簡単にこのことを利用してフィッシングを実行できます。
  • 着信フィッシング。アプリケーションで着信 SMS を受け入れている場合、詐欺師はハイパーリンクまたは電話番号が記載されているメッセージを送り込むことができます。メッセージ受信者がハイパーリンクをクリックするか、または電話番号に発信すると、被害者になる可能性があります。

詐欺防止の実践

  • ログインフローに Authy 2FA を実装する(上述の「Authy 2FA」をご覧ください)。
  • 送信制限を実装する。通話を送信制限できるのと同様に、アプリケーションへのメッセージトラフィックを送信制限できます。上述の「Programmable Voice」の「詐欺防止の実践」をご覧ください。
  • 任意の番号へのメッセージングを拒否する。アプリケーションがユーザーに任意の番号の入力を許可していないことを保証します。アプリケーションにこの機能が必要な場合は、その番号に任意のメッセージを送信できないことを保証します。
  • 着信メッセージからハイパーリンクまたは電話番号、あるいはその両方を削除する。これにより、メッセージングからコールツーアクションが削除され、フィッシングに使用できなくなります。

電話番号

実際に行われているにもかかわらず、最も目にすることの少ないのが、Twilio 電話番号の不正な転出を伴なう詐欺です。これは、スラミングとも呼ばれます。

詐欺のシナリオ

  • スラミング(内部)。このシナリオでは、詐欺師は、ユーザーが所有する高い価値のある番号(例:212 で始まる番号)を盗むために、ユーザーの Twilio アカウントへの不正なアクセスを取得します。次に、ユーザーに気付かれないように、この番号を別のキャリアに転出します。これで、詐欺師はこの番号を別の人に販売できるようになります。ユーザーのアプリケーションでこの番号への依存性がハードコードされている場合、アプリケーションで提供するサービスが停止する可能性があります。
  • スラミング(外部)。詐欺師は、Twilio アカウントにアクセスしなくても、番号を転出できます。この場合、詐欺師は、特定の番号が欲しいことを番号転出先のキャリアに通知します。詐欺師が番号転出先のキャリアから署名入りの LOA (Letter of Authorization:認可書)を入手して(またはなりすまして)、そのキャリアの登録ユーザーであることを示すことができた場合、そのキャリアが転出を実行できます。このキャリアは、転出について、ユーザーまたは Twilio に通知する義務を負わない場合があります。

詐欺防止の実践

  • アカウントを保護する。アカウントが厳重に防御されていることを保証することは、不正なアクセスや転出の防止に役立ちます。上述の「アカウントレベルの保護」をご覧ください。
  • 番号をハードコードしない。ユースケースによっては、特定の電話番号に明示的に依存しないでアプリケーションを実装するさまざまな方法があります。次に例を示します。
    • SMS:SMS メッセージを発信するには、メッセージングコパイロットを使用します。この場合、特定の Twilio 番号を使用してメッセージを送信するのではなく、番号のプールを設定したメッセージングサービスを事前に定義して、そのサービスを使用してメッセージを送信します。いずれかの番号が使用できない場合、アプリケーションはプールに含まれる別の番号を使用して再試行できます。
    • Voice:アプリケーションが通話を発信する場合、TaskRouterを使用して番号のプールを管理できます。たとえば、プールに含まれる番号ごとにワーカーを作成します。通話を発信する必要があるときは、タスクを作成します。TaskRouterは、タスクに使用できるワーカー(番号)を見つけて予約し、その番号を含む webhook をシステムに生成します。次に、通話 API を使用して、その番号に通話を発信します。予約が受諾されると、ワーカーは使用可能になり、番号が解放されて、以降の通話で使用できるようになります。アプリケーションがいずれかの番号への通話が失敗したと判断した場合、その番号に対応するワーカーをアイドルとしてマークした後、再試行できます。アイドルとマークされたワーカーは、ローテーションから外れます(詳細については、「TaskRouter API Reference」をご覧ください)。

詐欺が疑われる場合

アカウントが不正アクセスされているか、詐欺師によって頻繁に使用されていると考えられる場合、できる限り早く次の対応を行う必要があります。

  • Twilio に問い合わせる。Twilio は、不正利用アクティビティに関するお客様からの報告を極めて真剣に受け止めます。攻撃されたことが疑われる場合は、ただちに Twilio カスタマーサポート(support@twilio.com)または Twilio 不正利用担当チーム(fraud@twilio.com)にご連絡ください。
  • Suspend or close your account. When an account is suspended, it can’t be used to make or receive calls or SMS messages. A suspended accounts can be reactivated later if desired. You can also have your account closed permanently. To suspend or close your master account, contact help@twilio.com. If you have subaccounts, they can be suspended or closed from the API Explorer in the Console.
  • パスワードを変更する。アカウントを一時停止できない場合は、パスワードを変更することによって、不正なユーザーによるアクセスをブロックできます。所有者以外のユーザーがそのアカウントに対するアクセス権を持つ場合、それらのユーザーのパスワードも変更する必要があります。その方法については、この記事をご覧ください。大文字、小文字、数字、および特殊文字を使用した強いパスワードを使用することを推奨します。このパスワードは、複数のサービスや Web サイトで再利用しないでください。注:ユーザーがパスワードを変更すると、詐欺師はコンソールにログインできなくなります。ただし、ユーザーのアカウント SID と認証トークンを知っていれば、API を使用することはできます。したがって、次の対応を行う必要があります。
  • 認証トークンを置き換える。詐欺師がユーザーのアカウントを利用して通話の発信またはメッセージの送信を行っている場合、認証トークンが漏洩している可能性は非常に高いので、新しい認証トークンに置き換える必要があります。これにより、置き換える前の認証トークンを使用して API リクエストを送信することはできなくなります。
  • API キーを削除する。置き換える前の認証トークンで作成した API キーは、無効にするか、削除する必要があります。詐欺師が API キーへのアクセスを取得できる可能性は非常に低いのですが、不可能ではありません。古い API キーは、新しい認証トークンで作成した新しい API キーで置き換えることができます。
  • 番号への通話をブロックする。着信トラフィックポンピングの被害者は、不要な音声通話を受信し続けます。これらの通話はブロックできます。詳細については、ヘルプ記事の「How can I stop receiving phone calls?」および「I’m receiving unwanted calls or SMS messages on my Twilio number. What can I do?」をご覧ください。

ヘルプが必要ですか?

誰しもが一度は考える「コーディングって難しい」。そんな時は、お問い合わせフォームから質問してください。 または、Stack Overflow でTwilioタグのついた情報から欲しいものを探してみましょう。