hosting lolipop heteml security anti-abuse

不正利用報告の管理と自動化

hosting lolipop heteml security anti-abuse

こんにちぐぉおおおおおおおおおおおおおおお。最近デスコアにハマっている 40代半ばの linyowsです。若い頃にハードコアバンドをやっていたせいか、いい年して最近またそれ系のニッチな音楽を聞いている次第です。これが中年の危機と言われるものなんでしょうか。よくわかりませんが、筋トレのおかげで精神は至って普通です。心配はご無用!本日は、ホスティング事業部 Trust & Safetyチームでの話を書きます。

  1. サービスと不正利用
  2. 不正利用の報告
  3. 不正利用対応の課題
  4. 定形業務の自動化
  5. まとめ

サービスと不正利用

私の所属するホスティング事業部では、ロリポップやへテムル、ムームードメインといったホスティング関連サービスを運営しています。自分のインターネットドメインを登録したい、ウェブサイトを公開したい、メールアドレスを使いたい、といった要望に応えるためのサービスです。そのようなサービスで、中には禁止している使い方をされるケースがあります。具体的には、フィッシング目的でドメインを登録したり、フィッシングサイトを設置したり、フィッシングサイトに誘導するためにメールを送信したり、大量の迷惑メールを送信したり、といったものです。私たちは、これらを不正利用と呼んでいます。不正行為は、お客様自ら行う場合と、利用するソフトウエアの脆弱性や認証情報の管理の甘さによってアカウントが乗っ取られたり、改ざんされたりし、お客様が意図せず行われる場合があります。

私たちのサービスは、一般的にいうシェアードホスティング(共用ホスティング)という分類のホスティングサービスです。一つのハイスペックで高価な業務用サーバーを、複数のお客様が利用できるようにして安価に提供するサービスです。なので、先述の不正利用行為をするアカウントがその中にいると、利用している全アカウントに悪影響をもたらすことがあります。リソース(IPアドレス)をシェアしているので当然ですね。現実世界は信用の上で成り立っているのは言うまでもないでしょう。インターネットの世界も同様で、接続に使う名前(ドメイン)やIPアドレスは、DNSBL(DNS Block List)と呼ばれるサービスによって評価されているため、不正行為によってメールの受け取り拒否が特定IPアドレスやIPアドレスレンジで発生することがあります。そうすると、私たちは問題を特定したり、IPの付け直しを行い、サービスを正常化させる活動を行います。

不正利用の報告

ドメインレジストラは、ドメインやIPアドレスを管理するデータベースであるWHOISに、RFC2142によって定められた不正利用の通報先を設定しています。国内だとJPCERT、海外だとSpamCopやNetcraftといったセキュリティ会社や団体があり、それらはフィッシングサイトやフィッシングメールなどの行為を発見し、改善するようWHOISの不正利用通報先へメールを投げてくれます。私たちは、その報告から実際に状況を確認し、問題を認め、アカウントをインアクティブ化します。メールによる通報は問題のあるドメインやIPアドレス、URLを掲載しているため、うっかりリンク先を開いてしまったり、セキュリティソフトが検知して削除されたりと、そのメール自体にリスクを抱えています。そのようなリスク回避のために Defang という簡単な手法によって無害化されています。例えば、以下のような文字列です。

hXXp://abuse-domain[.]example/gr3lk1

一般的なメールクライアントは、便利なことにURL形式のテキストをリンクにしてくれるので、それを回避しているわけです。

不正利用対応の課題

不正利用報告のメールは、Google WorkspaceのGmailでホストしています。また、報告に対する対応をGitHub Enterprise ServerのIssueを使って管理しています。届いたメールをIssueに登録するのは、自社で作ったRuby Applicationと管理用DBによって行われていました。

不正利用報告メールは、通常人が送信しているため、担当者が違うと、タイトルや本文のフォーマットが変わります。それらの表記揺れは、Ruby Applicationの正規表現によってコントロールされており、フォーマットが異なるとその正規表現を更新しなければなりません。自前アプリケーションとはいえ、これらの運用にはなかなかコストがかかります。

私たちの不正利用報告メールアドレスには、波があるものの、1日におよそ100通ほどの報告が来ます。不正利用対応は、少人数で対応しているため、捌けないと対応待ちがどんどん積み上がります。多いと4000件以上スタックします。また、大量の報告には重要な報告が含まれることがあります。例えば、お客様に提供しているドメインの上位レジストラからServerHold通告などです。ドメインのステータスがServerHoldになると、通常ドメインは機能しないため、Webサイトは見えませんしメールも使えません(ドメインのステータスについてはこちら参照)。そういった重要度の高い連絡が中には含まれているので注意が必要です。

Abuse reports manage system: Before

不正利用報告システムを図にすると上記のような構成になり、課題を箇条書きにすると以下の3つになります。

  • 人が介在する作業フローの自動化においてメンテコストを小さくしたい
  • 大量の報告メールを効率よく捌きたい
  • 重要な報告メールを検知したい

定形業務の自動化

メールのフィルタリングを自作のアプリケーションとして行う必要はないとして、まずはフィルタリング機能を持っているGmail側で行うようにします。そうすると、フィルタのルール変更や追加をGUIベースでやれるため、メンテナンスの敷居が下がります。自作のアプリケーションから、フィルタリング機能を抜いたら、あとはメールをGitHub Issueに登録するだけになるため、Gmailと権限周りで連携しやすいGoogle Apps Scriptでやるようにします。機能としては、Gmailのラベル検索でマッチするものを処理します。処理済みは処理済みラベルを付与することで重複を排除できる仕組みです。Gmailの機能を活用することでScriptの方はステートを持たないでいい設計です。こちらのScriptはOSSとして公開しています。

次に、不正利用報告はIPを指定されることが多いため、DNSの逆引きを事前にしておき、GitHub Issueのコメントとしてホスト名を残しておきます。GitHub Issueの本文にある IPアドレスはすべてを処理対象として、dns.googleのAPIを使って逆引きを行います。処理済みは、Gmailと同様の手法でGitHub Issuesのラベルで管理します。こちらのScriptもOSSです。

そして、不正利用報告のメールはいろんな方々からいただきますので、メールのSubjectの形式が様々です。また、私たちは複数サービスの不正利用対策に携わっているため、サービス名で報告を絞り込めると便利です。それらの細かいユースケースに対する整形作業もScript化します。これは、抽象化しにくい実装なのでPrivateなScriptになりました(名前は abuse-issues-formatting)。

ここまでの対応で、課題の一つである 人が介在する作業フローの自動化においてメンテコストを小さくしたい はだいぶ解消されました。二つ目の課題、 大量の報告メールを効率よく捌きたい は難しい課題で、シンプルに考えると報告を受けて行う作業を標準化することになります。しかし、改ざんや脆弱性、通常機能の悪用によって行われた不正利用に対する作業というのは多くのバリエーションがあり、実現にはかなりの時間を要しそうだと考えておりました。

一方で、作成された報告Issueにはいくつもの重複があるという話がありました。報告メールの受信は、対象のInboxにくるまでに幾つかの転送を挟んで受信することもあって、メールそのものが重複したり、報告主は違うが同じ案件を報告しているケースがあるということが判明することから、まずは重複Issueを閉じていくScriptを実装しました。同一ドメイン、同一メール本文を検索し、古い方に紐づけて新しい方を閉じるというものです。これもかなり抽象化が厳しいのでPrivate Scriptです(名前は abuse-issues-closer)。このScriptにより、4000件超えていたIssueがびっくりすることに減り2-300件までに減りました。

Abuse reports manage system: After

不正利用報告システムが上記のような構成になり、責務分割されたGoogle Apps Scriptが、ちょっとしたワークフローのようになっております。

弊社では、特定ラベルが付いたIssueを特定時間にSlackに通知する仕組み https://github.com/linyows/github-issues-notice が稼働しています。設定は Google Spreadsheetsから行え簡単に導入できるため、全社各所で使われています。この通知Scriptは、勤務時間に合わせ休日は通知しない仕組みになっております。最後の課題である 重要な報告メールを検知したい に関しては、メールフィルタで重要連絡元にラベルを設定し、通知Scriptは休日でも検知が行えるようにしました。以下は、通知サンプルです。

Important notice

これで、重要な不正利用報告メールを逃さない仕組みができました。

まとめ

ホスティング事業部 Trust & Safetyチームでは、大量のサービスの不正利用報告メールから、サービス安定化のために対応を行なっています。それらを少人数で効率よく対応できるよう、Google Apps Scriptで自動化しています。その自動化のプロセスを簡単にご紹介いたしました。

もちろん今回の外部からの不正利用報告の事後対応だけではなく、不正利用の事前検知や、そもそも不正利用を防止するための仕組みづくりも行なっています。しかしながら、それらは難易度のある課題でもあります。私たちTrust & Safetyチームは、この難しい課題を一緒に解決してくれる仲間を募集しています。この記事を読んで面白かった、興味が持てた、という方は下にある採用情報をご覧いただきご応募いただけるとうれしいです!カジュアル面談もできますので @linyows へお気軽にお声掛けください! デスコアが好きな人もぜひ!