macOSにおけるセキュリティーキーを使ったログイン(FileVault有効時)の注意点

環境: macOS (Apple silicon M1)

TL;DR

Macbookのログインに利用できるキーは実質メインキーのみであり、backupキーによるFileVaultの復元ができません。 パスワードによるログインは可能のままにしておくことが必要です。

YubiKeyでMacbookへのログイン設定

AppleのM1以降ののMacでは、FileVault認証にYubiKeyを使うことができます。 通常YubiKeyを利用する場合、紛失に備えてbackup用のキーを設定します。 紛失した場合にロックアウトされてしまうからです。

しかし、FileVaultを有効にしている場合、利用時がこの考え方が通用しません。 複数のキーをペアリングしたとしても、 認証時には、最後に認証に使用されたスマートカードのみが有効になる仕様のようです[参考]。 バックアップ用に設定されたスマートカードは直前に利用していない限り ディスクをロック解除することができません。

つまり、backupキーが実質的に機能せず、 普段利用しているメインキーを紛失した時点でMacへログインが不可能になります。

YubiKeyによるログインを必須にすることは下記のように可能ですが、このリスクを認識しないといけません。

# この設定をするとキーを紛失すると詰みます。
sudo defaults write /Library/Preferences/com.apple.security.smartcard enforceSmartCard -bool true

backupキーによるFileVaultの復元ができませんので、他にリカバリ手段がない個人の利用者は、ログインにはパスワードによる認証も許可するようにしておくことが必要です。

[参考] こちらに記載されていました

Since a Mac's encrypted data has yet to be unlocked during this authentication, only the smart card that was used most recently to authenticate will work.

最後に

ログインでは上記のリスクがありますが、iCloudへの認証の2FAとしてセキュリティを強化できます。

OpenBullet2入門 (1.導入~Config確認)

自分の所有していないサービス、自分のテストする権利のないサービスに対しこのツールを利用することは違法行為となるため実行してはいけません。ここで紹介するソフトの不適切な利用についてこの文書の著者は如何なる責任も負いません。

OpenBullet2とは

  • OpenBullet は target となるwebsiceに対して様々なリクエストを送ることができ、同時にその結果を解析することでサイトの安全性を確認することができるオープンソースペネトレーションツールです。自身の管理するWebサーバのセキュリティ調査、各種自動化に利用できる便利なツールです。

その一方、OBの高機能を悪用することで、

  • brute force によるATO(account takeover: 乗っ取り)
  • Credential stuffingによるATO(流出したアカウント情報による攻撃)
  • 持続的な標的型攻撃(Advanced Persistent Threat)
  • DoS攻撃

といったことも可能となります。cyber-securityの分野において、blue team/red teamを問わず、OpenBulletはその便利さゆえに最も重用されるツールの一つとなっているようです。

  • もともとはBlackBulletという有償ソフトのOSS版であり、C#で開発されソースはgithubで公開されておりupdateも頻繁になされています。
  • OpenBulletはWindowsプラットフォームのソフトであったが、現在ではWebUIで操作できWindows, Linux, MacOSで動作が可能なOpenBullet2が利用できる。現在はOpenBullet2にメインの開発が移行しているようです。
  • コミュニティはhttps://discourse.openbullet.dev/

OpenBulletとOpenBullet2

OpenBulletには現在3つのVersionがあります。

  • OB1   Windowsマシン向けに作られていて、すでに開発をストップ
  • OB2      WebはWeb Interfaceを備えたCross-platform
  • OP2   NativeはOpenBullet1と同様なI/Fを持つので、OB1に慣れたユーザ向けになる。   ただしOSはWindowsのみのサポートになる。 f:id:Tengri:20211226230624p:plain

Configファイルとは

  • 自動化ファイルのことである。攻撃対象にサイトに応じてカスタマイズでき、ユーザコミュニティで作製された拡張機能を”Plugins”として追加することができる。
  • loliというスクリプト言語で書かれている。
    • loli-scriptのドキュメントについてはこちら。
  • bot検出で使われるreCaptcaの回避(reCaptcha bypass)がビルトインされていて、Seleniumと連携して人間の動きを模したりjavascriptの実行が可能である。

インストール

インストールはWIndows_Linux_/MacOSで実行可能です。性質上仮想マシン上で実行すると思います。 実行環境: Kali linux 2021.1 ARM64

dockerを用いた場合

OpenBullet2はC#で書かれておりLinuxで実行するには別途Dotnetのインストールがあり若干煩わしい。最も簡単に開始できるのはDockerである。

Dockerをすでにインストールしていなければ下記のようにdocker.ioパッケージをインストールする。newgroupコマンドで一時的にdockerグループに追加し、sudoなしでコンテナを実行できるようにする。 コンテナ内で共有されるUserDataディレクトリを用意し、openbullet/openbullet2:latestというコンテナを下記のように起動する。

# docker install 
apt install docker.io 
# temporarily join docker group 
newgrp docker 
# sharing UserData with the container
mkdir UserData

# run openbullet2:latest 
docker run --name openbullet2 --rm -p 5000:5000 -v ${PWD}/UserData:/app/UserData/ -it openbullet/openbullet2:latest

binaryによるインストール

binaryのインストールでは,まず、[ここから](https://github.com/openbullet/OpenBullet2/releases/latest)OpenBullet2.zipとPatch.zipをダウンロードします。

  次に、ここからaspnetcore-runtcme-5.x.xx-linux-xxx.tar.gz をダウンロードします。(xxxは最新のバージョンです。)OpenBulletはdotnet Core で作られているのでLinuxで実行するにはランタイムライブラリが必要です。

適当なデリレクトリ(OpenBullet2)を作り、そこにOpenBullet2.zipを含め下記の3つを同じ場所に格納してください。 このようにしないと解凍でファイルが散らかってしまいます。

  • OpenBullet2.zip
  • Patch.zip
  • aspnetcore-runtome-5.x.xx-linux-xxx.tar.gz

最初にOpenBullet2.zipを解凍してください。 次にPatch.zipを解凍し全てのファイルを全て上書きしてください。 最後にdotnetランタイムライブラリを解凍して下さい。

$ gunzip OpenBullet2.zip && gunzip -f Patch.zip && tar xvzf aspnetcore-runtome-5.x.xx-linux-xxx.tar.gz

以上です。実行するには下記のコマンドでWeb Interfaceが立ち上がります。

OpenBullet2の起動

次のコマンドでOpenBullet2のサーバを立ち上げます。

$ dotnet ./OpenBullet2.dll

デフォルトでは5000ポートを使用します。ブラウザにてlocalhost:5000 にアクセスすると下記画面が確認できると思います。

以上でインストールは終了です。

OpenBullet2の実行

Proxyの設定

ProxyはOpenBulletにとってとても重要です。 通常サーバは単一のIPアドレスから大量のアクセスを受けた場合、そのIPアドレスからのログインを禁止することで、サーバへのBrute Force Attackを防ぎます。これはサーバのセキュリティ検証テストの際に問題があります。

OpenBullet2はProxyリストを使用し、毎回異なるIPアドレスを用いてログインを試みることができます。このためサーバはBrute Force Attackに気づくことを困難にします。

OpenBullet2では一般的なProxyのプロトコル(HTTP, Socks4, Socks4a, and Socks5)をサポートしています。 proxyのリストはインターネットから購入するか、検索により入手します。ここでは無料のプロキシリストを例えばこちらからtxtファイルをダウンロードします。 このサイトはファイルだけでなくAPIによるファイルリストの取得が可能です。

  • ファイルの登録 左メニューよりProxiesを選び、右側、緑のAdd Groupボタンを押します。 まずProxies リスト毎に指定する(任意の)Group名を指定します。

次に緑のImport Proxiesボタンから先ほどDLしたproxyリストを読込ます。 f:id:Tengri:20211226225105p:plain

すると下のように読み込んだproxyサーバのリストが表示されます。 以上で読込は完了ですが、これらのproxyが利用可能かどうかというチェックは別途必要です。 f:id:Tengri:20211226225131p:plain

ファイルをダウンロード後に登録する方法でしたが、APIを利用してProxiesリストをサイトから直接取り寄せる方法(例)も可能です。f:id:Tengri:20211226230434p:plain

メニュー -> Proxies -> Import Proxies -> URL というタブを指定します。 そこに先のサイトから取得したAPIエンドポイント(URL)を指定することで最新のリストを取込むことができます。 f:id:Tengri:20211226225419p:plain

Proxy Check

メニューからJobsを選択します。デフォルトのジョブとしてProxy Checkがあるので、それを選択すると下記のような表示が出ます。Botsはスレッドのの数で複数のproxyがある場合はこれを増やすことで並列化できます。 TImeoutはデフォルト10000millsec つまり10secですが短くても良いでしょう。Create Jobを押します。 f:id:Tengri:20211226225705p:plain

Create Jobを押すと、Startボタンを押し、Proxyのチェックが開始します。 アクセス可能なproxyが見つかればWorkingにカウントされます。 f:id:Tengri:20211226225728p:plain

Wordlists

Wordlists はBrute Force に使うCredential (username:passwordのペア)やEmail等を記載したリストファイルを読み込むための機能です。 ファイル名、ファイルのタイプがあります。 デフォルトで定義されているタイプは

* Default
* Emails 
* Credentials 
* Numeric
* URLs    

があります。Defaultのファイルタイプは、一行一行をひとつのワードとして読込みます。Credentialsは各行にusername:passwdが記載されている場合に使用します。ユーザ名とパスワードの間をコンマ”:”でセパレートしています。Numeric,URLs,Emailsタイプは文字通り、それぞれ数字、URL,Eメールアドレスが各行に記載されているものです。

Wordlistの設定ファイルはUserData/Environment.iniにあります。このファイルには以上で紹介したファイルタイプが記載されています。 このファイルに新たなタイプを追加することで、必要なタイプを追加することも可能です。

下ではrockyou.txt を指定しました。 f:id:Tengri:20211226225804p:plain

この状態で、+addを押せば読込は完了です。

f:id:Tengri:20211226225824p:plain

Configの作成

OpenBulletで最も重要なのはConfigです。Configは特定のサイトを攻撃する場合にそのサイト専用にカスタマイズしたプログラムのモージュールや、自動アクセスやサイトを巡回するモジュールを実行することができます。 これらモジュールはConfigと呼ばれgithub等のインターネット上に公開されたり、ハッキングサイト経由での掲示板での販売、次のようなサイトでOpenBullet Configs Shopにて販売されています。

[注意]インターネットや上記のようなサイトで入手したConfigファイルを実行前に必ず内部コード(特にC#, loli code)の動作を確認してください

ここでは最も簡単なモジュールを作成してみます。 まずはメタデータを登録し、Configの名前や製作者、アイコンを指定し空のConfigファイルを作成してみます。 f:id:Tengri:20211226225844p:plain

Configha作成すると下記のアイコンに変わります。プログラムを作成するためアイコンをダブルクリックします。 f:id:Tengri:20211226225900p:plain

すると左側にエディタが表示されます。まだ何もありませんので、下記の+アイコンからAddを押して機能を追加します。

Addボタンを押すと機能毎の大項目が表示されます。 それぞれの項目名に関連した機能が用意されていますのでそこからGUIにて機能を選び、プログラムを構成する仕組みになっています。

  • Captchas
  • Conditions
  • Functions
  • Interop
  • Parsing
  • Puppeteer
  • Requests
  • Selenium
  • Utility

f:id:Tengri:20211226225920p:plain

まずはHello world

メニューからLoliCodeを選択しエディタを表示します。 printに相当する関数はLOGになります。 下記のように LOG “hello world”と記載し、右の緑のStartボタンを押すと、Logにメッセージが表示できます。 ちょっと簡単すぎですかね。

f:id:Tengri:20211226225946p:plain

freeで手に入るConfigファイルを参考に、もう少し具体的な利用例を見ていきます。

Config

コンフィグファイルの保存フォルダ [UserData/Configs]

Openbullet2を起動したフォルダ(Openbullet2.dllがあるフォルダ)に,UserDataというフォルダがあると思います。このフォルダがGUIで作成した各種ファイルが保存されています。 先ほど作成したConfigファイルが拡張子”.opk”で保存されていることが確認できると思います。

OPKファイルの中身

OPKファイルは複数のファイルのアーカイブになっていてzipフォーマットで圧縮されています。 Linuxではunzip等のコマンドが利用できます。またWindows等ではopkの拡張子をzipに書き換え解凍ソフトで解凍する事が出来ます。

解凍すると主に4つのファイルが確認できると思います。

  • readme.md
  • metadata.json
  • settings.json
  • script.loli または script.cs

このうちmetadata.json はファイルのサムネイル等を含むメタ情報です。script.loliはloliScriptで書かれたメインスクリプト、script.csはC#のコードです。

ネットからDownloadしたCofigファイルもこのフォルダにコピーするだけで利用することができます。Web インターフェイスからConfigを開くと次のように追加したConfigファイルのアイコンが表示されます。 f:id:Tengri:20211226230008p:plain

次回

コンフィグファイルの作成について見ていきます。

参考文献

https://www.coursehero.com/file/103358120/Openbullet-Guidepdf/

Trend Micro : How Cybercriminals Abuse OpenBullet for Credential Stuffing