Sardine named a Leader in The Forrester Wave™: Financial Crime Management Solutions, Q3 2026

Learn More
Engineering
Engineering

4時間で構築した偽の求職者検出システム: SardineがAIを悪用した採用詐欺と戦う方法

Kazuki Nishiura
Kazuki Nishiura
bg-image
bg-image
4時間で構築した偽の求職者検出システム: SardineがAIを悪用した採用詐欺と戦う方法
Subscribe to newsletter
Share

リモート勤務が一般化し、AIの性能が向上するにつれて、偽の求職者が増えています。 Gartnerは2028年までに求職者の4人に1人が偽物になると予測しています(!)

これは私たちも実際に直面している問題です。採用チームはこうした応募内容の確認に多くの時間を費やさなければなりません。だからこそ、Chandni(人事・タレント責任者)と私が力を合わせてこの問題を解決することにしました。

デモ

4時間のコーディングの後、動作するプロトタイプが完成しました。1日分の実際の応募データに対して実行し、不審な応募をフラグ付けすることができました。詳しくは以下のデモ動画をご覧ください。

技術アーキテクチャ

これは、私たちが構築した2段階システムのアーキテクチャ図です。

この2つのステップは次のとおりです。

  1. 求人応募のスクリーニング: 候補者が応募すると、履歴書と応募フォームで提出された情報をもとに自動的にスクリーニングを行います。
  2. 面接スクリーニング: 次に、候補者が履歴書のスクリーニングを通過した場合、ミーティング招待リンクをクリックした際に追加のデバイス情報を取得します。

詳細は以下のセクションで説明します。

__wf_reserved_inherit
__wf_reserved_inherit

ステップ1: 求人応募のスクリーニング

私たちはATS(応募者追跡システム)としてAshbyを使用しています。Ashbyや他のATS(greenhouseやleverなど)は、新しい応募が作成された際にサードパーティ製システムに通知するWebhookを提供しています。

私はこれらのWebhookを取り込むシンプルなCloud run functionを作成しました。Webhookのペイロードには、候補者の氏名、メールアドレス、電話番号、IPアドレスなどの情報が含まれています。Sardineにはすでに本人確認詐欺防止機能があるため、既存のSardine APIを呼び出すだけで済みました。コーディングにはcursorを使い、すでに自社APIを理解しているMCPがあったため、vibeコーディングでSardine APIを扱うのは非常に簡単でした。

応募時に収集された情報をもとに、Sardineは以下のようなさまざまなシグナルをチェックできます。

  1. IPアドレスIPアドレスの国が勤務地と一致しているかIPアドレスがVPNまたはプロキシかどうかIPアドレスの評判
  2. メールアドレスメールアドレスが新規かどうかメールドメインが使い捨てかどうか
  3. 電話番号電話番号がVOIPかどうか電話番号と提供された氏名が一致するかどうか
  4. グラフベースの特徴量この電話番号は多数の応募に使われていないか?このメールアドレスは多数の応募に使われていないか?

Sardine APIからリスク評価の結果を取得したら、Ashby APIを呼び出して候補者の応募にメモを添付します。

__wf_reserved_inherit

ステップ2: 面接リンク

Sardineにはすでに独自のデバイスインテリジェンスと行動生体認証技術があったため、最初は不審なデバイスや行動のシグナルを取得するために、応募ページにWeb SDKを組み込むことを考えていました。しかし、Ashby(および他の多くのATS)では応募ページにカスタムJavaScriptを埋め込むことができないことが分かりました。応募ページをSardineでホストしたページ(デバイスデータを追跡できる)にiframeで埋め込むことはできますが、その情報を紐付ける方法がありません(つまり、どのフロントエンドセッションが、その特定の応募に対応するSardine SDKによって認識されるのか、が分からないのです)。

そのため、2つ目のプロジェクトに取り組むことにしました。それは、応募者をミーティングURL(Google Meetなど)にリダイレクトするシンプルなWebページです。この中間サイトを経由することで、Sardine SDKを使って候補者のデバイス情報を取得できます。私はbolt.newを使って、最低限のシンプルな静的Webページを生成しました。

__wf_reserved_inherit

その後、Sardine SDKの統合は簡単です(なお、ドキュメントは既存のSardineのお客様のみご利用いただけます。ご興味があれば、ぜひお問い合わせください!)。

__wf_reserved_inherit

Sardineのデバイス SDKを使うことで、次のようなさまざまな情報を取得できるようになりました。

  • プロキシの背後にある実際の位置情報は?
  • 画面はリモートで操作されていないか?
  • デバイスのフィンガープリントは何か

これらのシグナルにより、不正防止機能がさらに強化されます。

まとめと今後の改善点

実際のデータを使って、不正な求人応募の検出に私たちの技術が応用できることが分かりました。

今後の改善に向けたアイデアをいくつか挙げます。

  • ユーザーの行動(コピー&ペーストやマウスの動きなど)も取得できるよう、ホスト型の求人応募ページを実装する。
  • 履歴書のPDFを取り込み、それが本物かどうかを確認する。
  • ATS内にネイティブ統合を持たせる。

この問題を解決するために私たちが達成できることに、大きな期待を寄せています。不正な求人応募の問題を解決したい方は、ぜひお問い合わせください!