公開ミッションとガイドライン

安全なコーディングを実用的に実現

OWASP Top 10のようなソフトウェアの脆弱性を理解して軽減するためのセキュア・コーディング・ガイドラインを調べたり、ガイド付きのトレーニング「ミッション・トゥ・プラクティス」を実際のアプリ・シミュレーションで実践したりしてみましょう。

学习背景

すべてのミッションを見る

生産性の向上
SQL インジェクション
あるユーザーから、インターネットバンクソリューションのトランザクション検索機能にある SQL Injection の脆弱性を悪用できたという報告を受けました。彼らは、他のユーザーのトランザクションを見ることができたと述べ、この脆弱性により、攻撃者がテーブルの削除、他のテーブルからのデータの表示、データの挿入など、データベースに対してあらゆる種類の厄介なことを行う可能性があると指摘しました。このミッションでユーザーが行ったことを再現してみてください。
生産性の向上
スプリングMVCリクエストマッチャー
2023年3月、Springは内部で発見されたCVE-2023-20860と呼ばれる脆弱性に対する修正をリリースしました。この脆弱性では、MVCRequestMatchersで二重ワイルドカード**を使用すると、Spring SecurityとSpring MVCの間でパターンの不一致が発生する可能性があります。これにより、最終的にユーザーが特定のエンドポイントに不正アクセスできるようになる可能性がありました。いくつかのエンドポイントを含む、非常にシンプルなバンキングアプリケーションをセットアップしました。指示に従い、このアクセス制御の脆弱性の影響を再現してみてください。
生産性の向上
サイキック・シグネチャ-既知の脆弱コンポーネントの使用
CVE-2022-21449には、脆弱性の最もクールなエイリアスであるJavaのサイキックシグネチャがあります。どうやってその名前がついたの?ドクター・フーの心霊論文への引用よ誰かに見せると、この白紙の切れ端には、期待通りの内容が詰め込まれているはずです。ECDSA アルゴリズムの Java (バージョン 15 ~ 18) の実装でも同様のことが起こり、JWT の署名検証に影響が出ました。無効な署名を送信することもできますが、Java はその署名が有効であると見なしてしまいます。どのように動作するのか見てみたいですか?さっそく始めましょう。
生産性の向上
Apache パストラバーサル-既知の脆弱なコンポーネントの使用
2021年10月4日、Apacheチームは、CVE-2021-41773としても知られるApache 2.4.48のパストラバーサルとリモートコード実行の脆弱性に対処するために、Apacheのバージョン2.4.49をリリースしました。2021 年 10 月 7 日、ホットフィックス 2.4.50 の修正が完了しなかったため、バージョン 2.4.51 がリリースされました。この脆弱性は CVE-2021-42013 として追跡されました。このミッションを試して、この脆弱性がどのように悪用されるかをご自身で確かめてください。
生産性の向上
Log4j-既知の脆弱なコンポーネントの使用
2021年12月初旬に、非常に人気のあるロギングライブラリLog4jでの0日間のエクスプロイト(CVE-2021-44228)が発表されたことで、Javaコミュニティは大きな打撃を受けました。Log4Shell と呼ばれるこのエクスプロイトは Log4j v2 バージョン 2.0-beta9 から 2.14.1 に影響を及ぼし、リモートコード実行につながる可能性があります。このエクスプロイトを模擬する環境を設定したので、影響を直接確認できます。今すぐ試してみてください。
生産性の向上
トロイの木馬ソース-信頼できないソースからのコンポーネントの使用
Viking Bankの開発者の一人は、クレジットカードを管理するための管理者権限チェックの作成に役立てるために、脆弱なコンポーネントを含む可能性のあるインターネット上の信頼できないソースからコードを素朴にコピーしました。管理者だけがこの権限を持つべきなのに、ユーザーがクレジットカードの上限を変更していることに気づきました。そのコードには何か問題があると思います。コードを調査するミッションを試してみよう。
生産性の向上
Codestashbin-安全でないパスワードリセット機能
CodeSashBinは世界最大級のコードバージョン管理ホスティング会社です。うわさによると、パスワードを忘れた場合の処理には、安全でないパスワードリセット機能の脆弱性による欠陥があるそうです。特権ユーザーのパスワードを変更して、そのユーザーのアカウントにアクセスできるようになる可能性があります。このミッションに飛び込んで、問題を調査してください。
生産性の向上
「ChatterGPT」のクロスサイトスクリプティング (XSS)
このミッションでは、人気のLLMの使い慣れたインターフェースを明らかにし、2023年11月下旬に生成された実際のコードスニペットを活用します。ユーザーはこのスニペットを解釈して、意図した目的に使用された場合の潜在的なセキュリティ上の落とし穴を調査できます。

すべてのガイドラインを見る

浏览基准:
隐藏过滤器
选拔
显示过滤器
选拔
清除过滤器
[标签]
超级图标 [★]
主题
查看更多

ロギングとモニタリングが不十分

最佳实践:

敏感功能的审计日志
错误日志
在集中位置存储日志
在规定时间内保留日志
定期审计 PII 的日志

ロギングとモニタリングは、すでに何か問題が発生したときには後回しにされることがよくありますが、実際には、適切なロギングと監視が行われていることを確認できないと、非常にコストがかかる可能性があります。極端な例を挙げると、インシデントが発生したとき (セキュリティ関連であろうとなかろうと)、ログがほとんどないか、まったくないと、実際に何が起こったのかを把握することが不可能になります。反対に、ログに記録するデータが多すぎるとプライバシーの問題が発生し、規制当局との問題につながる可能性があります。ロギングやモニタリングが不十分にならないようにするためのベストプラクティスについては、ガイドラインをお読みください。

ガイドラインを表示

使用存在已知漏洞的组件

{
「依存関係」: {
「foo」:「1.0.0-2.9999.9999"、
「バー」:「>=1.0.2 <2.1.2"
}
}

ほとんどのアプリケーションでは、大量のサードパーティ製コンポーネントを使用します。これらのコンポーネントは、ロギング、テンプレート、データベースアクセスなど、あらゆる機能を提供します。これにより、ソフトウェアの開発がはるかに簡単になり、時間を大幅に節約できます。しかし、それらは人によって作られているため、中には必然的に脆弱性が含まれているものもあります。ガイドラインを読んで詳細を調べてください。

ガイドラインを表示

SQL インジェクション

import mysql.connector
db = mysql.connector.connect
#Bad Practice(不良做法)。避免这样做!
(host="localhost", user="newuser", passwd="pass", db="sample")
cur = db.cursor()
name = raw_input('Enter Name: ')
cur.execute("SELECT * FROM sample_data WHERE Name = '%s';" % name) for row in cur.fetchall(): print(row)
db.close()

SQL インジェクション (SQLi) は、SQL ステートメントにコードを挿入して攻撃し、アプリケーションから重要な情報を収集します。これは Web セキュリティの脆弱性です。データベースを操作し、そこから重要な情報を抽出するハッキングの最も一般的な手法です。

ガイドラインを表示

セキュリティの設定ミス

多くのフレームワークには、本番環境でもテスト/開発環境でも、アプリケーションの監視を可能にする有効化可能なエンドポイントのセットもあります。これらには以下が含まれます。

メトリクス (プロメテウス)
ログ
環境情報
パス/URL マッピング

セキュリティ設定ミスとは、不適切なコードではなく、アプリケーションの構成設定が原因で発生する一般的な脆弱性を指す包括的な用語です。これは多岐にわたるテーマであり、使用しているテクノロジースタックなどの要因に大きく依存します。多くの場合、これらの問題への対処は、設定ファイルを変更したり、コードを 1 行変更したりするなど、簡単に思えるものですが、これらの脆弱性の影響と結果は深刻な場合があります。この脆弱性の詳細と軽減方法については、ガイドラインをご覧ください。

ガイドラインを表示

サーバーサイドリクエストフォージェリ

TS
url = request.params.url としましょう。

レスポンス = http.get (url); とします。
レンダー=レスポンス.render ();

レンダー.export (); を返します。

サーバーサイドリクエストフォージェリの脆弱性は、ユーザーがアプリケーションに攻撃者が指定したドメインに HTTP リクエストを送信させることができる場合に発生します。アプリケーションがプライベート/内部ネットワークにアクセスできる場合、攻撃者はアプリケーションに内部サーバーにリクエストを送信させる可能性もあります。このガイドラインでは、実際の動作がどのようなものかをよりよく理解するために、いくつかの例を挙げて詳しく見ていきます。

ガイドラインを表示

パスワードストレージ

功能 加密哈希值 密码哈希值 速度 非常快 故意慢 工作系数可调整 否 是

アプリケーションがユーザーを認証する場合、パスワードも処理する可能性があります。ユーザーパスワードの取り扱いは非常に大変な作業ですが、適切に処理することはさらに重要です。アプリケーションが攻撃され、ユーザーパスワードがインターネット経由で漏洩し、すべての人に見られるようになるほどひどいシナリオは想像できません。パスワードを安全に、そしてベストプラクティスに従って保管するにはどうすればよいのでしょうか。いくつかの方法を見ていきましょう。

ガイドラインを表示

一括割り当て

html
<form method="POST">
<input name="Id" type="hidden" value="666">
<input name="Name" type="text" value="Bad guy">
<input name="EmailAddress" type="text" value="hacker@attacker.com">
<input name="IsAdmin" type="hidden" value="true">
<input type="submit">
</form>

Mass Assignmentは、APIエンドポイントが関連オブジェクトのどのプロパティをユーザーが変更できるかを制限しない脆弱性です。この脆弱性は、HTTP パラメーターをモデルに自動的にバインドし、検証なしでそのまま使用できるようにするライブラリ/フレームワークを利用する場合に発生する可能性があります。リクエストからオブジェクトへの自動バインドを使用すると非常に役立つ場合がありますが、ユーザーがアクセスできないように意図されたプロパティがモデルにあると、セキュリティ上の問題が発生する可能性もあります。詳細についてはガイドラインをお読みください。

ガイドラインを表示

セキュリティ設定ミス-XXE 詳細

xml
<?xml バージョン= "1.0"?>
<!DOCTYPE アウターエレメント [
<!] >
<outerElement>&外部エンティティ;</outerElement>

「XML 外部エンティティ」(XXE) 脆弱性クラスは、XML パーサーが関与するセキュリティ設定ミスです。XML 標準には、ファイルや URL などの「エンティティ」を参照する方法が含まれています。多くの場合、パーサーは外部エンティティを完全に解決するのがデフォルトです。つまり、XML 文書によって、潜在的な攻撃者にファイルやその他の機密情報が漏洩する可能性があります。詳細についてはガイドライン全文をお読みください。

ガイドラインを表示

インジェクション-パストラバーサル

擬似
baseFolder =「/var/www/api/documents/」とします。
パス = ベースフォルダ + request.params.filename; とします。

ファイル.read (パス) を返します。

パストラバーサルは、インジェクションの脆弱性としてよく見られるもう 1 つのタイプです。URI の構築 (URL、ファイルパスなど) で、完全に解決されたパスが目的のパスのルートの外側を指していないことが適切に保証されない場合に起こりがちです。パストラバーサル脆弱性の影響は、トラバーサルが発生する場所や、トラバーサルが行われた全体的な強化方法に大きく依存します。詳しくはガイドラインをお読みください。

ガイドラインを表示

認証と承認

cs

//デフォルトの動作がリクエストの認証であることを確認し、リクエストが管理者かどうか確認する
[認証]
[承認 (「管理者」)]
パブリッククラスセキュアコントローラ:コントローラ
{

}

パブリッククラスMyController: セキュアコントローラ
{

//継承された Authorize 属性を上書きして、すべてのユーザーがページにアクセスできるようにします

ガイドラインを表示

インジェクション-XSS

```html
<!---UNSAFE: The htmlSnippet will get interpreted without any escaping--->
@Html .Raw (HTML スニペット)
``

XSSとも呼ばれるクロスサイトスクリプティングは、攻撃者が制御するスクリプトを他のユーザーのブラウザで評価する原因となる別のタイプのインジェクション脆弱性です。XSS は HTML/JavaScript インジェクションの脆弱性と見なすこともできます。発生する可能性のある XSS の種類を見てみましょう。

ガイドラインを表示

インジェクション 101

最も一般的な注射タイプには次のものがあります。

SQL インジェクション
クロスサイトスクリプティング (HTML/JavaScript インジェクション)
パストラバーサル (パス/URL インジェクション)
コマンド・インジェクション
コード・インジェクション

最もよく知られている脆弱性のクラスの 1 つは、インジェクションの脆弱性です。特に、誰もが疑う余地のない存在である SQL インジェクションは、誰も驚かないでしょう。テクノロジーの世界で SQL インジェクションについて耳にするのは避けられないので、ここではそのことについて話すことにします。この記事を読んで、インジェクションの欠陥について簡単に紹介しましょう。

ガイドラインを表示

ファイルアップロード

public string UploadProfilePicture(FormFile uploadedFile)
{
    // Generate path to save the uploaded file at
    var path = $"./uploads/avatars/{request.User.Id}/{uploadedFile.FileName}";

    // Save the file
    var localFile = File.OpenWrite(path);
    localFile.Write(uploadedFile.ReadToEnd());
    localFile.Flush();
    localFile.Close();

    // Update the profile picture 
    UserProfile.UpdateUserProfilePicture(request.User, path)

    return path;
}

アプリケーションがどこかの時点で、アプリケーション内のどこかにファイルを (使用用または保存用に) アップロードできるようにする必要があるのはよくあることです。一見簡単そうに見えますが、ファイルのアップロードの処理方法には潜在的なリスクが伴うため、この機能の実装方法は非常に重要です。詳細についてはガイドラインをお読みください。

ガイドラインを表示

コマンド・インジェクション

IP = request.Params.IPAddress; とします。

システム (「ping」+ IP);

コマンド・インジェクションそのものを見てみましょう。主にいくつかの異なる例に焦点を当てて、実際にどのように見えるかをわかりやすくします。簡単に説明しておきますが、コマンドインジェクションの脆弱性は、ユーザー入力がオペレーティングシステムのコマンドの一部を使用する場合に発生します。詳細については、ガイドラインをお読みください。

ガイドラインを表示