問題は、ほとんどの場合、ローカルアカウントは期限切れにならず、複雑さがチェックされておらず、特権アクセスが残っていることです。さらに、パスワードポリシーでは、要件を柔軟に構成できるとは限りません。たとえば、辞書パスワードの使用が禁止されているわけではありません(みんなのお気に入りのP @ ssw0rdを思い出してください)。
QIWIでも同様の問題が発生しましたが、それらを解決するために、本格的なデータベーススキャンのためにさまざまなソリューションを試しました。残念ながら、これらは主にDBMSの構成をチェックすることのみを目的としており、それ以上のものはありません。同時に、そのようなスキャナーの価格は非常に印象的です。
また、インフラストラクチャの脆弱性をチェックできるセキュリティスキャナーについて一般的に説明する場合は、そのようなスキャナーのセットが必要になりますが、これは非常に高価です。
この投稿では、私たちがタスクに何を使用したか、そしてその過程でどのようにして自分たちで作成する方がより良く、より簡単であるという結論に達したのかについて話します。そして、私はその解決策をみんなと共有します。
かなり人気のあるスキャナーを使用しています。しかし、必要な機能を実装するのは困難でした。データベースごとに監査ファイルを作成し(DBMSの構成が異なるため)、スキャン用のアカウントを多数作成してから、新しいアカウントを追加し、監査人を手動で変更する必要がありました。
さらに、このスキャナーはパスワードをオフラインでブルートする方法を知りません。これは問題です。そしてそれが理由です。
ブルートフォースは、オンラインとオフラインの2つのモードで実行できます。オンラインのブルートフォースについて話している場合、これはユーザーログインとアクティブなブルートフォース攻撃のエミュレートです。そのようなプログラムの1つがHydraであり、ほとんどのDBMSをサポートします。このアプローチは、ほとんどの場合、侵入テストを実行し、デフォルトのアカウントとパスワードを検出するために適用できます。ただし、定期的なチェックやデフォルト以外のアカウント(ユーザーとサービス)には適していません。この場合のアカウントは、適切なセキュリティポリシーがある場合にブロックされるためです。
オンラインのブルートフォースとは異なり、オフラインバージョンでは、ログインとパスワードハッシュがアンロードされ、hashcatやJohn theRipperなどのユーティリティを使用してブルートフォースが実行されます。データベースに負荷がかからず、力ずくでアカウントをロックするリスクもありません。また、数百万のエントリを持つ辞書を使用することもできます。これは、オンラインのブルートフォースではほとんど不可能です。
私たちは
説明した機能を現在のスキャナーで実装することは困難であり、追加のスキャナーを購入するのに費用がかかるため、独自のスキャナーを作成するというアイデアが生まれました。
その結果、オフラインのブルートフォースローカルアカウント用の独自のスキャナーがあります。
スキャナーはMSSQL、Oracle、PostgreSQLをサポートしています。もちろん、hashcatがサポートする形式でハッシュをプルするなど、いくつかの技術的な問題がありました。しかし、主な難しさは、見つかった結果を処理する方法を理解することです。生産性を損なうことなくパスワードを変更する方法、そのようなパスワードが再び表示されないようにする方法などです。
ただし、これはこの記事の範囲外にしておきます。
django管理パネルを使用している間、UIはあまり改善されません。次のようになります。
- データベースのリストを表示して、新しいデータベースを追加することができます
- 各アカウントのブルートフォースステータスを確認できます
- あなたはスキャン結果を見ることができます
- 弱いパスワードが一致する場合、結果にこれを表示します(パスワードハッシュ、推測パスワード、アカウント名)
- スキャン時間を設定できます
主な利点
- オフラインモードでブリュットする方法を知っている
- 辞書チェックがあります
- それはすべて無料です
このようなスキャナーを導入する必要があるかどうか疑問がある場合は、ローカルアカウントからパスワードハッシュを手動で取得し、hashcatを介して実行してみてください。リクエストの
例:
oracle 11g
select user#, name, spare4 from sys.user$ where spare4 is not null;
マイクロソフトSQLサーバー(2005年以降):
select name, cast (name+'|'+master.dbo.fn_VarBinToHexStr(password_hash) as varchar(1000)) FROM master.sys.sql_logins
私たちのスキャナーは本格的なセキュリティスキャナーに取って代わるものではありませんが、重要で快適な追加となるでしょう。そして今、それは誰でも利用可能です:github.com/qiwi/bruteforce
展開に関して質問や問題がある場合は、githubで問題を作成してください。私たちは間違いなく答えます。
実装に感謝しますSurdum そして slezhuk