Canarytokensサービスを試してみた
ある調べものをしていたところ、Canarytokensというサービスがあることを知った。
Canarytokensはカナリアトークンを生成するサービスであり、無料で利用できるほか、githubでソースコードやDockerfileが公開されているため自分でサービス稼働環境を構築できる。カナリアトークンとはターゲット(被害者)がWebページ、電子メール、ファイルなどのリソースにアクセスする操作をしたときに、そのアクセスした事実やターゲットの環境情報(IPアドレス、UserAgent、ユーザ名など)を攻撃者に通知するための仕掛けである。
このサービスを知った時は、アクセス解析で使われるようなWebページに極小の透明画像やiframeを埋め込むような方式を想像したが、ドキュメントを読んでいると他にも様々な方式をサポートしていることがわかった。そこで、実際にどういった仕掛けで、どういった情報が記録されるのか試してみることにした。
なお、なぜカナリアというかは、昔の炭鉱でガス発見の警報装置としてカナリアが使われていたことに由来していると思われる。
ja.wikipedia.org
ここから各方式の紹介に入るが、全ての方式に共通して、ターゲットがカナリアトークンに引っかかった時の通知先としてEメールアドレスを指定できる。今回は、以下の使い捨てのメールアドレス発行サービスを使用した。
✉ Guerrilla Mail - Disposable Temporary E-Mail Address
- Web bug / URL token
- DNS token
- Unique email address
- Custom Image Web bug
- Microsoft Word Document
- Acrobat Reader PDF Document
- Windows Folder
- Custom exe / binary
- Cloned Website
- SQL Server
- QR Code
- SVN
- AWS keys
- Fast Redirect
- Slow Redirect
- Slack API key
- まとめ
Web bug / URL token
URLが生成される。
生成されたURLにアクセスすると真っ白な画面が表示される。 HTMLソースを確認すると、ブラウザ情報を記録するようなフィンガープリント機能を持つJavaScriptが実装されていることを確認できる。
URLへアクセス後に以下の通知メールを受信した。
また、カナリアトークンごとにHistoryページが提供され、そこではもっと詳細な記録情報を閲覧できる。
DNS token
canarytokens.comのサブドメインが生成される。
サブドメインにnslookup
コマンドで問合せすると以下の情報が記録された。
Unique email address
Eメールアドレスが生成される。
メール送信すると、以下の情報が記録された。
Custom Image Web bug
画像をアップロードすると、URLが生成される。
imgタグ等でアクセスすると、アップロードした画像が表示され、アクセスした際に情報が記録される。
記録される情報は接続元IPアドレスとUserAgent。
見つからないようにするには、1px×1pxの透明画像を使用すると良いのだと思う。 最初に自分が想像していたカナリアトークンに一番近い。
Microsoft Word Document
Wordファイルが生成される。
開いても特にマクロは埋まっていない。ただ、ヘッダーとフッターが設定されているように見える。
WordファイルをZipファイルとして展開すると、footer2.xmlにINCLUDEPICTURE "http://canarytokens.com/about/traffic/articles/whb0ezqg0ahskmqdwjjndemyg/contact.php"
が埋め込まれており、HTTPリクエストが飛んだようだ。
記録される情報は接続元IPアドレスとUserAgent。
自分の環境ではUserAgentはMozilla/4.0 (compatible; ms-office; MSOffice 16)
となった。
機密ファイルが社外で開かれていないかを確認するために使用できそうだ。
Acrobat Reader PDF Document
PDFファイルが生成される。
Acrbat Readerで開くと以下の警告ダイアログが表示される。
「許可」するとWebブラウザが立ち上がり、URLへのアクセスが発生した。 ただ、HTTPではなくDNSへのアクセスを見ているようで、記録される情報は接続元IPアドレス程度であった。
警告ダイアログが表示されてしまうと、ターゲットに気付かれないようにするのは少々厳しい。
Windows Folder
個人的に一番驚いた手法。
Zipファイルが生成され、Zipファイルを展開するとMy Documents
というフォルダが展開される。
My Documents
フォルダを開くと、エクスプローラーが固まるためしばらく待つと、フォルダの中にdesktop.iniファイルが確認できる。
desktop.iniの中身は以下のとおり。
[.ShellClassInfo] IconResource=\\%USERNAME%.%COMPUTERNAME%.%USERDOMAIN%.INI.jomvcu020919h7fvr2k2er61h.canarytokens.com\resource.dll
フォルダをエクスプローラーで開くだけでDNS通信が発生していたようで、結果、以下の情報が記録された。
これもまた、機密のzipファイルが社外で開かれていないかを確認するために使用できそうだ。
Custom exe / binary
EXEファイルをアップロードすると、カナリアトークンが埋め込まれたEXEファイルが生成される。
ここでは7zのインストール用のEXEファイルで試すことにした。
面白いことに、生成されたEXEファイルをダウンロードすると同時に以下の情報が記録された。
「Microsoft Defenderの仕業かな」と思って設定を確認したところ「サンプルの自動送信」がオンになっていた。
設定をオフにしてから再度EXEファイルを生成すると、ダウンロードすると同時に記録されることは無くなったため予想通り。サンプルの自動送信をすると、Microsoftのサンドボックス環境みたいなところで実行されるのだろうか。
自分でEXEファイルを実行すると、以下の情報が記録された。思ったより情報量は少ない。
ターゲットにEXEを実行させる障壁が高そうだ。 そして折角EXEを実行させられるのであれば、もっと色々なことができそうだ。
Cloned Website
以下のようなJavaScriptが生成される。
if (document.domain != "https://example.com") { var l = location.href; var r = document.referrer; var m = new Image(); m.src = "http://canarytokens.com/"+ "fqcm9lekdo4ibfoh33ivslg05.jpg?l="+ encodeURI(l) + "&r=" + encodeURI(r); }
自分が管理しているWebサイトにこのJavaScriptを埋め込んでおくと、自分のWebサイトをクローンされて、そこに誰かがアクセスした際に、クローン先のサイトのURLの通知をうけることができるようだ。
サイトの運用者側で、フィッシングサイトを見つけるのに役立ちそうだ。
SQL Server
カナリアトークンの生成画面は以下のとおり。 通知のトリガーとなるDML操作とテーブルを指定できる。
実行すると以下のようなSQLが生成される。
--create a stored proc that'll ping canarytokens CREATE proc ping_canarytoken AS BEGIN declare @username varchar(max), @base64 varchar(max), @tokendomain varchar(128), @unc varchar(128), @size int, @done int, @random varchar(3); --setup the variables set @tokendomain = 'h3q9kuxguigeeyscumxvia9s1.canarytokens.com'; set @size = 128; set @done = 0; set @random = cast(round(rand()*100,0) as varchar(2)); set @random = concat(@random, '.'); set @username = SUSER_SNAME(); --loop runs until the UNC path is 128 chars or less while @done <= 0 begin --convert username into base64 select @base64 = (SELECT CAST(N'' AS XML).value( 'xs:base64Binary(xs:hexBinary(sql:column("bin")))' , 'VARCHAR(MAX)' ) Base64Encoding FROM ( SELECT CAST(@username AS VARBINARY(MAX)) AS bin ) AS bin_sql_server_temp); --replace base64 padding as dns will choke on = select @base64 = replace(@base64,'=','-') --construct the UNC path select @unc = concat('\\',@base64,'.',@random,@tokendomain,'\a') -- if too big, trim the username and try again if len(@unc) <= @size set @done = 1 else --trim from the front, to keep the username and lose domain details select @username = substring(@username, 2, len(@username)-1) end exec master.dbo.xp_fileexist @unc; END --add a trigger if data is altered CREATE TRIGGER TRIGGER1 ON TABLE1 AFTER INSERT AS BEGIN exec ping_canarytoken end
環境を作って試すところまでできていないが、SQL文を見ると、SUSER_SNAME()
関数を実行してWindowsのユーザ名を取得し、サブドメイン名として送信しているようだ。
攻撃者の興味を引くようなテーブルを用意して、データベースの中身が窃取されていないかを確認するために使用できそうだ。
QR Code
その名のとおり、QRコードが生成される。
QRコードには以下のようなURLが埋め込まれている。
http://canarytokens.com/feedback/traffic/tags/iuixoweag4nucmn1vo76jk0mv/submit.aspx
アクセスすると記録される情報は接続元IPアドレスとUserAgent。
SVN
以下のコマンドが生成される。
svn propset svn:externals "extras http://dvztaffuww7mzjfe7tw0p75e9.canarytokens.com" .
自分が管理しているリポジトリにこのコマンドを実行することで、誰がか勝手にリポジトリをクローンしたことに気付けるようだ。
AWS keys
実行すると以下のAWSのアクセスキーが生成される。
[default] aws_access_key_id = AKIAXYZDQCENVA3R6Y7J aws_secret_access_key = 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 output = json region = us-east-2
root@kali:~# aws configure --profile canary AWS Access Key ID [None]: AKIAXYZDQCENVA3R6Y7J AWS Secret Access Key [None]: 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 Default region name [None]: us-east-2 Default output format [None]: json root@kali:~# aws s3 ls --profile canary An error occurred (AccessDenied) when calling the ListBuckets operation: Access Denied
20分程度待つと以下の情報が記録された。
Fast Redirect
Web bug / URL token
と似ているが、URLを生成する際にリダイレクト先のURLの指定ができる。
生成されたURLへアクセスすると、指定したURLにリダイレクトされる。
記録される情報は接続元IPアドレスとUserAgent。
Slow Redirect
Fast Redirect
と同様に、URLを生成する際にリダイレクト先のURLの指定ができる。
記録される情報はWeb bug / URL token
と同じで、接続元IPアドレスとUserAgentに加え、ブラウザ情報なども含まれる。
Slack API key
実行すると以下のSlackのAPIキーが生成される。
# Slack API key slack_api_key = xoxp-905439787527-905447633015-1784132156549-acecf32171dd971f2ee2561cd0bd0eae
root@kali:~# curl 'https://slack.com/api/auth.test' \ > -d 'token=xoxp-905439787527-905447633015-1784132156549-acecf32171dd971f2ee2561cd0bd0eae' {"ok":true,"url":"https:\/\/ctorgworkspace.slack.com\/","team":"ct.org","user":"marge.haskell.bridge","team_id":"TSMCXP5FH","user_id":"USMD5JM0F","is_enterprise_install":false}
10分程度待つと以下の情報が記録された。
まとめ
カナリアトークンの使い道としては、生成したURL等を何らかの媒体でばら撒いてハニーポットとして使うほか、機密ファイルの漏洩有無の確認、Webサイトのクローン先のサイトの検出など、多岐にわたる。こちらのサービスと方式のパターンを知っておくと、どこかで役に立ちそうである。実際に何か目的があって使う場合は、自分で環境を立てる方がよさそうだ。