プログラミング初心者のための、OSINTに役立つAPI | Codebook|Security News
Codebook|Security News > Articles > 脅威インテリジェンス > プログラミング初心者のための、OSINTに役立つAPI

脅威インテリジェンス

Cyber Intelligence

Intelligence

サイバーインテリジェンス

プログラミング初心者のための、OSINTに役立つAPI

Tamura

Tamura

2023.03.02

 

OSINTの調査ではAPIが大いに役立ちます。この記事では、プログラミングの経験があまりなくてもAPIを使ったカスタム機能を作ることができる方法を、3つご紹介します。

私は世界各地を回って、OSINTをめぐる悩みを解決したり、OSINTについて教えたりする機会に恵まれています。深く学びたいと思う分野を人から伝えられることは多いのですが、その中にはプログラミング(大抵はPython)の習得がいつも含まれています。プログラミングの習得に役立つリソースは数えきれないほど存在しますが、始めるのに最適な方法は、アプリケーションプログラミングインターフェース、すなわちAPIを使うことです。

*本記事は、弊社マキナレコードが提携する米Flashpoint社のブログ記事(2023年1月31日付)を翻訳したものです。

 

関連記事:OSINTとは? 活用方法、ツール、注意すべき点

APIとは?

APIとは、情報や機能の持ち主が、それらを使いやすい形にして他の人に開放するための方法です。例えば、Twitterのデータは、それ以外のソーシャルメディアプラットフォームのデータと比べて、はるかに多くのサードパーティサイトに分析されていることをご存知ですか?その最たる理由の1つは、Twitterには、無料で使える上、コードを書けばTwitterデータを取得し、好きなように分析したり可視化したりできるようにしてくれる、APIがあるからです

もしOSINTに関心をお持ちでプログラミングの技能を向上させたいのなら、APIに取り組むのは取っ掛かりに最適です。なぜなら、自分の機能を一から開発せずに、他のソースからのデータを使って自分の調査で使える機能を作り、ゆくゆくは他の人と共有することができるからです。

ウェビナー「プログラミング初心者のためのオープンソースAPI:OSINT APIで調査チームをパワーアップしよう」(*クリックするとFlashpointのサイトに移動します)

使えるOSINT API、3選

このブログでは、OSINTに役立つと思われる3種類のAPIを取り上げます。誰もが入手できる情報(publicly available information:PAI)を自動収集することに特化したものが1つ、Eメールアドレスのエンリッチメントに特化したものが1つ、もう1つは分析に関わる機能提供することに特化したものです。

3つの例では、コードをプログラミング言語のPythonで示します。プログラミングの技能は、OSINTの実務を行う上で必須のものではありませんが、以下のいくつかの例で見ていく通り、基礎的なプログラミング技能は身につけておけば何かと役に立ちます。

コードの書き方を習得することに関心をお持ちなら、Pythonがぴったりです。理由としては、Pythonは非常に人気で、習得やトラブルシューティングに役立つリソースがネット上に多数転がっているから、など多数あります。

分析用のデータを収集する

まず、Twitter APIを使って始められる方法を見ていきましょう。理由は、後でお話しします。まず最初に、Twitter Developerとして登録します。この工程は、2分とかからず、お金も一切かかりません。唯一の条件は、利用するTwitterアカウントが有効な電話番号と紐づいていることです。このステップを終えたら、「Bearer Token」と呼ばれる固有の長い文字列が与えられます。これを自分のコードに含めることで、自分が何者かをTwitterに対して証明するのです。

このステップが終わったという前提で、基本的なPythonコードを見ていきましょう。これは、OSINT界隈では「dutch_osintguy」として有名な私の友人、Nicoによる最新のツイートを全て閲覧するためのコードです。

import requests

 

# 以下をご自分のbearer tokenに置き換えてください

bearer_token = ‘INSERT_YOUR_BEARER_TOKEN_HERE’

 

#APIリクエストの「Authorization」ヘッダーをbearer tokenに設定します

headers = {‘Authorization’: f’Bearer {bearer_token}’}

 

#requests.get() 関数を使ってTwitter API v2にAPIリクエストを行います

#例えば、以下のようにして、特定ユーザーによる最新のツイートを集めることができます

response = requests.get(

    ‘https://api.twitter.com/2/tweets/search/recent’,

    headers=headers,

    params={‘query’: ‘from:dutch_osintguy’}

)

 

#APIの応答には、リクエストしたデータが入ります

tweets = response.json()[‘data’]

 

#すると、複数ツイートに反復適用し、ツイート1件1件のデータを分析することができます

    print (tweet)

ここまで、コメントと空白の行を含め、たった22行です!

それでは、どのようにやるかを説明したので、なぜやるかをお話ししましょう。上の例はやや…ナンセンスに見えますか?なぜ、あるユーザーの最新ツイートを見るために、TwitterのWebサイトに行くのではなく、コードを書くのでしょう?上記の場合であれば、1人のユーザーだけを見ているため、おそらくコードは書きません。しかし、何かを1回やることは簡単かもしれませんが、1万回や10万回(か、それ以上)やることは非常に難しいか、全く現実的でないかもしれません。このような場合には、コードを書いて上記のプロセスを自動化することで、あなたは解放され、人間の得意とするタスク(例えば、分析や、結果への背景情報の付与)に手をつけられるかもしれません。

APIを使う大きな利点のもう1つは、持続的な自動モニタリングを行うことです。私は今までのキャリアで、次のようなタスクを何度も与えられてきました。例えば、「この重要人物の自宅住所が漏えいした場合に、それを可能な限り早く察知する」というものです。私は、そのためにWebブラウザやTweetDeckに毎日24時間かじりついていたいとは、全く思いませんでした。なのでコードを書き、調べる必要のあるものを全て監視してもらい、何か新しい結果が見つかったらEメールを送信してもらうようにしました。何行ものコードを書かなくても、申し分のない結果は得られます。

Twitter APIを使った持続的モニタリングに関心をお持ちの方は、2021年のSANS Open-Source Intelligence Summitで私がお話ししたプロセスと公表したコードを参考にしてください。

Eメールのエンリッチメントを自動で

Hunter.ioというサービスは、組織の構成員のメールアドレスを特定したり、メールアドレスに関する付加的な情報を発見したりしようと試みる、攻撃側のセキュリティのプロやOSINTの実務に携わる人たちに人気です。Hunter.ioには、検索を月25回、検証を月50回行える、API付きの無料プランがあります。この検証機能を使って、メールアドレスmatt@argeliuslabs.comに関する付加的な情報を発見するコードを見てみましょう。

import requests

 

# 以下をご自分のAPIキーに置き換えてください

api_key = ‘INSERT_YOUR_API_KEY_HERE’

 

#requests.get() 関数を使ってHunter.io APIにAPIリクエストを行います

#例えば、以下のようにしてメールアドレスを検索することができます

response = requests.get(

    ‘https://api.hunter.io/v2/email-verifier’,

    params={‘email’: ‘matt@argeliuslabs.com’, ‘api_key’: api_key}

)

 

#APIの応答には、リクエストしたデータが入ります

data = response.json()

 

#メールアドレスと、その関連ドメインおよび組織に関するデータにアクセスできます

このコードはTwitterのコードよりもさらに短いですね!では結果を見てみましょう。

matt@argeliuslabs.com

{‘data’: {‘status’: ‘accept_all’, ‘result’: ‘risky’, ‘_deprecation_notice’: ‘Using result is deprecated, use status instead’, ‘score’: 71, ‘email’: ‘matt@argeliuslabs.com’, ‘regexp’: True, ‘gibberish’: False, ‘disposable’: False, ‘webmail’: False, ‘mx_records’: True, ‘smtp_server’: True, ‘smtp_check’: True, ‘accept_all’: True, ‘block’: False, ‘sources’: []}, ‘meta’: {‘params’: {‘email’: ‘matt@argeliuslabs.com’}}}

大量の情報は返ってこなかったものの、中には使えそうなものもあります。例えば、Hunter.ioがこのメールアドレスを使い捨てドメインのものとは見ていないという情報などです。

私は最近、あるフォーチュン500の企業と仕事をしました。この企業は15万件以上のメールアドレスから成るデータベースをチェックし、不正を働く模倣ドメインとの関係が疑われるアドレスがないか調べる必要がありました。私たちは上記と似たテクニックを使い、15万件以上の中から悪性と思しきメールアドレスを3件特定することに成功しました。繰り返しになりますが、何かを1回やることは容易くても、手作業で15万回以上やりたい人はいません。

分析機能を追加する

これまでに見た2つの例は、データの取得に関するものでした。最後にご紹介するのは、手持ちのデータを分析するための分析機能や処理機能を追加することに関係しています。

2020年に、私はブログ記事を何本か書き、OSINTの実務に携わる人たちにAmazonのクラウド、すなわちAWSの素晴らしさをお伝えしようと試みました。Amazonからクラウドベースのシステムを「賃借り」して、Webサーバーや仮想マシンなどとして使えることは、広く知られています。一方、Amazonでデータの分析、処理、変換に役立つAPIが複数使えることは、あまり知られていません。これらのAPIのほとんどに「無料利用枠(Free Tier)」が適用されます。無料利用枠では、これらの機能を12か月間無料で利用でき、通常は十分な量の1か月あたり上限が設定されています。これらのAPIの中には、OSINTに役立つものがいくつかありますが、この記事で取り上げるのは画像認識サービスの「Rekognition」です。

Rekognition

Rekognitionには複数の使い道があり、画像に含まれる物体を特定する、画像からテキストを抽出するといったものがあります。今回はこれを、昔からあるOSINTをめぐる難問を解決するために使います。

例えばあなたは、数人がOSINTを行っているオフィスの内部に入って、複数のアナリストが1つの画面を熱心に見つめているところを目にしたとしましょう。この状況では、アナリストたちが1枚の写真に写る人と別の画像に写る人が同一人物かどうかを判断しようとしている可能性は十分にあります。残念ながら、この手作業と勘に頼った手法は最善とは言い難いです。ネットに投稿された写真に写った人と似ているという理由で、ソーシャルメディア上で濡れ衣を着せられる人々の例は、枚挙にいとまがありません。Rekognitionは、boto3(AWSを使うためのPythonライブラリ)の「compare_faces」関数を使って、この問題を解決に導きます。

以下は、2枚の画像に写った人を比較するコードです。

import boto3

 

#クライアントを設定します

client = boto3.client(‘rekognition’)

 

#比較対象の画像を読み込みます

image1 = open(‘image1.jpg’, ‘rb’)

image2 = open(‘image2.jpg’, ‘rb’)

 

#compare_faces関数をコールします

response = client.compare_faces(

    SourceImage={

        ‘Bytes’: image1.read()

    },

    TargetImage={

        ‘Bytes’: image2.read()

    }

)

 

#類似度スコアを取得します

similarity = response[‘FaceMatches’][0][‘Similarity’]

 

#類似度スコアを出力します

print(f”Similarity score: {similarity}”)

 

#類似度スコアが基準値を超えているかどうかをチェックします

if similarity > 90:

    print(“These are likely the same person”)

else:

    print(“These are likely not the same person”)

これと似たコードを使って私の写った2種類の写真を比較した際の結果を、ブログにて紹介しております。

完璧な手法はありませんが、このような結論付けを行う際に公平なセカンドオピニオンを持つと良いでしょう。OSINTへのAWSの利用について、さらに詳しく知りたい方は、私が書いた2部構成のブログ連載をお読みください。

OSINT調査に役立つAPIは他にも無数にあります。とはいえ、ご紹介した3つの例は、プログラミングをあまり必要としないカスタム機能作りを始める上で役に立つかもしれません。

Writer

Matt Edmondson

著者

米国政府の技術的任務を果たしつつ、Argelius Labsの代表を務める。Argelius Labsでは、セキュリティ評価とコンサルティング業務を行う。オープンソースインテリジェンス(OSINT)とデジタルフォレンジックにおける経験は多岐にわたり、これまで多数の調査を指揮、専門家証人として頻繁に証言するなどしてきた。

複雑な技術的論点を技術畑以外の人に伝えることを得意とし、自らの分野の専門家として認められていることから、国防省、司法省、国土安全保障省、内務省などの機関の人員に、サイバーセキュリティ教育を定期的に提供するとともに、情報セキュリティのカンファレンスや会合で頻繁に講演している。SANS Advisory Boardの一員であり、11のGIAC認定を保持(GREM、GCFA、GPEN、GCIH、GWAPT、GMOB、GCIAなど)。また、Offensive Security Certified Professional(OSCP)認定も保持。

Tamura株式会社マキナレコード インテリジェンス・翻訳チーム

訳者

2013年に一橋大学卒業後、新聞記者などを経て、2020年にマキナレコード入社。以降、翻訳スタッフとして、情報セキュリティ、インテリジェンス、ダークウェブ関連のレポートやマニュアル文書等の英日翻訳に携わる。インテリジェンス関連のブログ記事制作も担当。日本翻訳連盟「JTFほんやく検定」2級取得。

Special Feature特集記事

Cyber Intelligenceサイバーインテリジェンス

Security情報セキュリティ