必要性
フロントエンドの分離は、Webで大きな傾向になりました。 Tomcat+ngnixを介して効果的に分離することができます(中央にnode.jsもある場合があります)。さらに、フロントエンドとバックエンドの分離は、将来の大規模な分散アーキテクチャ、弾性コンピューティングアーキテクチャ、マイクロサービスアーキテクチャ、およびマルチターミナルサービス(ブラウザー、ビーチクルターミナル、Android、IOSなど)の複数のクライアント)の強固な基盤を築きます。 APIは、フロントエンドコミュニケーションの責任を引き受けます。したがって、APIセキュリティを学習する必要があります。
この記事のアイデアは、APIのいくつかの一般的な攻撃表面を要約することです。著者はまだこの領域を学んでいます。間違いがあれば、あなたがそれを修正できることを願っています。
一般的なAPIテクノロジー
graphql
GraphQlは、APIのクエリ言語です
通常、次の特性があります。
(1)データパケットは /graphqlインターフェイスに送信されます
(2)多くの新しい文字が含まれています\ n
{'query':' \ n query introspectionquery {\ r \ n __schema {\ r \ n queryType {name} \ r \ n mutationType {name} \ r \ n subscriptionType {name} \ r \ n at {\ r \ n . Fulltype } \ r \ n Directives {\ r \ n name \ r \ n説明\ r \ n locations \ r \ n args {\ r \ n . inputValue \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ rte __type {\ r \ n dind \ r \ n name \ r \ n説明\ r \ n fields(condeprecated: true){\ r \ n name \ r \ n説明\ r \ n arg } \ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ r \ n inputfields {\ r \ n . inputValue \ r \ n} \ r \ nインターフェイス{\ r \ n . tyeRef \ r \ n} \ r \ r \ n numvalues(ainteeprecated3360) {\ r \ n name \ r \ n説明\ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ n possibletypes {\ r \ n . Typeref \ r \ n} \ r \ n} \ r \ r \ r \ r n fartvalue on名前\ r \ n説明\ r \ n Type {. typeref} \ r \ n defaultValue \ r \ n} \ r \ nフラグメントTyperef on __type {\ r \ n decd \ r \ n name \ r \ n oftype {\ r \ n dince Kind \ r \ n name \ r \ n ofType {\ r \ n decny \ r \ n name \ r \ n oftype {\ r \ n dind \ r \ n name \ r \ n oftype {\ r \ n dince \ r \ n name \ r \ r \ r \ r \ r \ r \ r \ r \ r \ N } \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ r \ n} } \ r \ n} \ r \ n} \ r \ n} \ r \ n '、'変数':Null} Webサービスの説明を、クライアントがドキュメント情報またはプロセスコールを含むサービスにアクセスできるサービスアクセスポイントのセットとして定義します。 SOAPプロトコルが使用され、通常はXML形式のデータが送信され、WSDLファイルがあります
.netのcommon.asmxファイルもwsdl形式xxx.asmx?wsdl を持っています
Soapuiを使用して、このタイプのAPIをテストできます
soap-wsdl
ファイルに非常に明白なWADLロゴがあります
SoapuiのREST機能をテストに使用することもできます
wadl
REST APIは以前のものほど明白ではなく、最近最も一般的に使用されているAPIテクノロジーでもあります
RESTは、プロトコルや標準ではなく、建築仕様のセットです。 API開発者は、さまざまな方法でRESTを実装できます。
クライアントがRESTFUL APIを介してリクエストを行うと、リソースステートメントをリクエスターまたは端末に渡します。この情報または式は、JSON(JavaScriptオブジェクト表記)、HTML、XLT、Python、PHP、またはプレーンテキストのいずれかの形式のいずれかでHTTPを介して送信されます。 JSONは、最も一般的に使用されるプログラミング言語です。元の英語名は「JavaScriptオブジェクト表記」を意味しますが、さまざまな言語に適しており、人間と機械の両方で読むことができます。
注意すべきことがいくつかあります。ヘッダーとパラメーターは、リクエストされたメタデータ、承認、統一リソース識別子(URI)、キャッシュ、Cookieなどの重要な識別情報が含まれているため、RESTFUL API HTTP要求のHTTPメソッドでも重要です。リクエストヘッダーと応答ヘッダーがあり、それぞれに独自のHTTP接続情報とステータスコードがあります。
休息
APIのセキュリティテストについては、通常、APIの許可問題、APIエンドポイントのセキュリティ問題、インフラストラクチャに焦点を当てています。
APIエンドポイントのセキュリティ問題をテストするには、できるだけ多くのAPIエンドポイントを取得しようとする必要があります
エンドポイントを取得する方法
Swaggerは、RestfulスタイルのWebサービスを生成、説明、呼び出し、視覚化するための標準化された完全なフレームワークです
一般的な指紋:
#swagger 2
/swagger-ui.html
/API-DOCS
/v2/api-docs
#swagger 3
/swagger-ui/index.html
/API-DOCS
/v2/api-docs
/v3/api-docs
.
API-DOCは、すべてのエンドポイント情報を表示できます
テスト用の2つのツールを次に示します
最初のものはSwagger-Editorです
https://github.com/swagger-api/swagger-editor
ダウンロード後、index.htmlを開くことで使用できます。 URLをインポートまたはリモートロードすることを選択できます。 JSONおよびYAML形式のAPI-DOCをサポートします。
2つ目はapikit3https://github.com/api-security/apikitです
バーププラグイン
swagger api-docsリーク
すべてのエンドポイント情報を取得します
https://mp.weixin.qq.com/s/gp2jgrlpllsh5xn7vn9bwq
{'query':' \ n query introspectionquery {\ r \ n __schema {\ r \ n queryType {name} \ r \ n mutationType {name} \ r \ n subscriptionType {name} \ r \ n at {\ r \ n . Fulltype } \ r \ n Directives {\ r \ n name \ r \ n説明\ r \ n locations \ r \ n args {\ r \ n . inputValue \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ rte __type {\ r \ n dind \ r \ n name \ r \ n説明\ r \ n fields(condeprecated: true){\ r \ n name \ r \ n説明\ r \ n arg } \ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ r \ n inputfields {\ r \ n . inputValue \ r \ n} \ r \ nインターフェイス{\ r \ n . tyeRef \ r \ n} \ r \ r \ n numvalues(ainteeprecated3360) {\ r \ n name \ r \ n説明\ r \ n isDeprecated \ r \ n deprecationReason \ r \ n} \ n possibletypes {\ r \ n . Typeref \ r \ n} \ r \ n} \ r \ r \ r \ r n fartvalue on名前\ r \ n説明\ r \ n Type {. typeref} \ r \ n defaultValue \ r \ n} \ r \ nフラグメントTyperef on __type {\ r \ n decd \ r \ n name \ r \ n oftype {\ r \ n dince Kind \ r \ n name \ r \ n ofType {\ r \ n decny \ r \ n name \ r \ n oftype {\ r \ n dind \ r \ n name \ r \ n oftype {\ r \ n dince \ r \ n name \ r \ r \ r \ r \ r \ r \ r \ r \ r \ N } \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ n} \ r \ r \ n} } \ r \ n} \ r \ n} \ r \ n} \ r \ n '、'変数':Null}
これを使用して、インターフェイスドキュメントを生成できます。
https://github.com/2fd/graphdoc
nodejs test.jsonが必要なのは、内省的クエリによって返されるJSON形式のデータです
NPMインストール-G @2FD/GraphDoc
graphdoc -s ./test.json -o ./doc/schema
次に、生成された/doc/index.html を開きます
彼のフォーマット
に従ってデータパケットを構築するだけです
graphql内省的クエリ
ブラックボックステストでは、APIエンドポイントが完全には見つからないことです。対応するアプリケーションまたは他の側面からそれらを探す必要があります。
(1)Web
JS HTMLなどの静的リソースには、いくつかのAPIエンドポイントを持つことができます
バーププラグインJS Linkfinderは受動的に収集できます
(2)アプリおよびその他のクライアントアプリケーション
(3)github
(4)ルールのファズによると
その他
認証方法
APIが要求されるたびにユーザーのユーザー名とパスワードを提供する
通常、HTTPパケットに認証ヘッダーがあります
Authorization: Basic Base64(username:password)
これは安全性が比較的低く、現在はめったに使用されていません
基本的な認証
JWT(JSON Webトークン)は、トークンベースの認証と認証メカニズムです
3つの部分に分かれています
Header:は、JWTのメタデータを説明し、署名を生成するためのアルゴリズムとトークンのタイプを定義します。 Payload:は、継続する必要があるデータを保存するために使用されます。サーバーは、JWTが計算方法暗号化アルゴリズム(base64(header) + ')、の計算方法の改ざんを防ぐために、ヘッダーで指定された署名アルゴリズム(デフォルトはhmac sha256)を使用します。
オンラインテストhttps://jwt.io/
通常のトークンには、バックエンドストレージとユーザーの間に対応する関係が必要ですが、JWTは対応する関係自体を運びます
jwt
Apikeyやランダムに生成された他の形式のトークン
その他のカスタムヘッダー、Cookie
一般的な安全性の問題とテスト方法
APIゲートウェイは、クライアントとマイクロサービスの間に構築されたサービスです。許可確認、監視、キャッシュ、リクエストルーティングなど、APIゲートウェイのいくつかの非ビジネス機能ロジックを処理できます。
APIゲートウェイは、マイクロサービスシステム全体のファサードのようなもので、システムの唯一の入り口です。これにより、クライアントは最初にAPIゲートウェイにリクエストを送信し、次にAPIゲートウェイが要求された識別情報に基づいてマイクロサービスインスタンスにリクエストを転送します。
APIゲートウェイ
Apache Apisixは、Apache Software Foundationの下にあるCloud-Native API Gatewayです。ダイナミック、リアルタイム、および高性能の機能を組み合わせて、ロードバランス、ダイナミックアップストリーム、グレースケールリリース(カナリアリリース)、サービスサーキットブレーカー、アイデンティティ認証、観測性などの豊富な交通管理機能を提供します。同時に、K8Sイングレスコントローラーとしてもサポートされています。 Apisixは以前にコマンド実行の脆弱性CVE-2022-24112を公開しました(現在の最新バージョンは3.0)
衝撃の範囲:
Apache Apisix 1.3〜2.12.1の間のすべてのバージョン(2.12.1を除く)
Apache Apisix 2.10.0〜2.10.4 LTS間のすべてのバージョン(2.10.4を除く)は脆弱性環境を構築します
git clone https://github.com/twseptian/cve-2022-24112 ## get dockerfileを入手してください
CD CVE-2022-24112/apisix-docker/example/##対応するディレクトリを入力します
docker -compose -p docker -apisix up -d ## dockerに基づいてすべてのapisixサービス利用条件を開始
Batch-Requestsプラグインはデフォルトで有効になります。
ユーザーは、Apache Apisixデフォルトの構成を使用します(管理者APIを有効にし、デフォルトの管理キーを使用し、追加の管理ポートが割り当てられていません)。攻撃者は、Batch-Requestsプラグインを介して管理者APIを呼び出すことができます。アイデアを攻撃します
1.バッチリクエストプラグインの脆弱性を使用して、バイパス要求ヘッダー検出をバイパスします。
2。要求ヘッダーを偽造して、管理者APIにルートを登録します。
3.ルートを登録すると、パラメーターFilter_FUNCがLUAコードを渡し、リモートコード実行の脆弱性Expを引き起こします。
https://github.com/twseptian/cve-2022-24112/blob/main/poc/poc2.py
Recommended Comments