Missions と指令

セキュアコーディングの実践

セキュアコーディングガイドラインを学び、OWASPトップ10などのソフトウェア脆弱性を理解し軽減しましょう。さらに、実際のアプリケーションを模したシミュレーションで実践できるガイド付きmissions 没頭してください。

BGを学ぶ

すべてのmissionsを閲覧する

生産性を向上させましょう
インジェクションSQL
あるユーザーから、オンラインバンキングソリューションの取引検索機能にSQLインジェクションの脆弱性が存在し、悪用可能であったとの報告がありました。 彼らは他のユーザーに属する取引を表示できたと述べ、この脆弱性により攻撃者がデータベース内でテーブル削除、他テーブルからのデータ閲覧、データ挿入などあらゆる悪意のある操作を実行可能だと指摘しました。このミッションにおいて、ユーザーが行った操作を再現してみてください。
生産性を向上させましょう
Spring MVC リクエストマッチャー
2023年3月、Springは内部で発見された脆弱性(CVE-2023-20860)に対する修正プログラムを公開しました。この脆弱性では、MvcRequestMatchersにおける二重の汎用文字 ** の使用により、Spring SecurityとSpring MVC間のパターン不一致が発生する可能性がありました。これにより、最終的にユーザーが特定の端末に不正にアクセスする恐れがありました。 我々は、いくつかのエンドポイントを持つ非常に簡略化された銀行アプリケーションを実装しました。指示に従い、このアクセス制御の脆弱性の影響を再現してみてください。
生産性を向上させましょう
サイキック署名 - 既知の脆弱なコンポーネントの利用
CVE-04-2149には、Javaにおける脆弱性としては最もクールな別名「サイキック・シグネチャ」が付けられています。この名称の由来は『ドクター・フー』の超能力アイテムに由来します。このアイテムを誰かに見せると、白紙の紙が相手が期待する内容で埋め尽くされるというものです。 Java実装(バージョン15~18)のECDSAアルゴリズムでは、JWT署名検証に影響する同様の現象が発生します。無効な署名を送信しても、Javaは有効と判断してしまうのです。その仕組みを見てみませんか?さあ、始めましょう。
生産性を向上させましょう
Apacheパストラバーサル:既知の脆弱なコンポーネントの利用
2021年10月4日、ApacheチームはApache 2.4.48におけるパストラベリングおよびリモートコード実行の脆弱性(CVE-2021-41773としても知られる)を修正するため、Apache 2.4.49をリリースしました。 2021年10月7日、修正パッチ2.4.50の不完全な修正を補うため、バージョン2.4.51が公開されました。この脆弱性はCVE-2021-42013として特定されています。この脆弱性がどのように悪用されるか、ご自身で確認するためにこのミッションをお試しください。
生産性を向上させましょう
Log4j - 脆弱性が確認されたコンポーネントの使用
2021年12月初旬、人気ロギングライブラリLog4jにおける0day脆弱性(CVE-2021-44228)の発表は、Javaコミュニティに衝撃を与えた。 Log4Shellと名付けられたこの脆弱性は、Log4j v2のバージョン2.0-beta9から2.14.1に影響を及ぼし、リモートからのコード実行を引き起こす可能性があります。当社ではこの脆弱性を再現する環境を構築しました。その影響を直接体験してください。今すぐお試しください。
生産性を向上させましょう
トロイの木馬ソース - 信頼できないソースからのコンポーネントの使用
バイキング銀行の開発者の一人が、クレジットカード管理用の管理権限チェックを作成する際に、インターネット上の信頼できないソースからコードを無防備にコピーしました。このソースには脆弱性のあるコンポーネントが含まれている可能性があります。 ユーザーがクレジットカードの限度額を変更できる現象を確認しました。この権限は管理者だけに与えられるべきものです。このコードに問題があると推測されます。コード調査のミッションを試みてください。
生産性を向上させましょう
Codestashbin - 不安全なパスワードリセット機能
CodeStashbinは世界最大級のコードバージョン管理ホスティング企業の一つです。 噂によれば、パスワード再設定プロセスに欠陥があり、安全でないパスワードリセット機能に関連する脆弱性が原因とされています。特権ユーザーのパスワードを変更し、そのアカウントにアクセスできる可能性があります。この問題の調査に参加してください。
生産性を向上させましょう
「ChatterGPT」におけるクロスサイトスクリプティング(XSS)
このミッションは、人気LLMの馴染み深いインターフェースを再現し、2023年11月末に生成された実際のコードスニペットを使用しています。ユーザーはこのスニペットを解釈し、意図された目的で使用された場合に生じうるセキュリティ上の脆弱性を分析できます。

すべてのガイドラインを参照してください

閲覧方法:
フィルターを非表示にする
選択
フィルターを表示
選択
フィルターを消去
標識
スーパーアイコン [★]
テーマ
さらに表示

記録と監視の不十分さ

ベストプラクティス:

監査ログの記録(機密性の高い機能向け)
エラーの記録
ログの集中管理場所への保存
ログの保存期間の設定
個人情報の監査ログの定期的な確認

記録と監視は、何か問題が発生した後に後回しにされがちですが、実際には適切な記録と監視を確保しないことは非常に大きな代償を伴う可能性があります。 一方で、インシデント(セキュリティ関連か否かを問わず)が発生した際、ログが不足しているか存在しない場合、実際に何が起きたのかを把握することが不可能になります。反対に、過剰なデータの記録はプライバシー問題を引き起こす可能性があり、それが規制当局とのトラブルにつながる恐れがあります。 ログ記録と監視の不備を回避するためのベストプラクティスについては、当社のガイドをご覧ください。

指示を表示する

既知の脆弱性を有するコンポーネントの使用

{
« dépendances » : {
« foo » : « 1.0.0 - 2.9999.9999",
« barre » : « >=1,0.2 <2.1.2 »
}
}

ほとんどのアプリケーションは大量のサードパーティ製コンポーネントを利用しています。これらのコンポーネントは、ログ記録からモデル生成、データベースアクセスに至るまであらゆる機能を提供します。これによりソフトウェア開発が大幅に容易になり、多くの時間を節約できます。しかし、それらは人間によって作成されているため、必然的に脆弱性を含むものも存在します。詳細についてはガイドをお読みください。

指示を表示する

インジェクションSQL

importer mysql.connector
base de données = mysql.connector.connect
Pratique #Bad. Evite ça ! C'est juste pour apprendre.
(host="localhost », user="newuser », passwd="pass », db="sample »)
cur = db.cursor ()
name = raw_input ('名前を入力してください: ')
cur.execute (« SELECT * FROM sample_data WHERE Name = '%s' ; » % name) pour la ligne dans cur.fetchall () : print (row)
db.fermer ()

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

指示を表示する

セキュリティ設定の不備

多くのフレームワークには、有効化可能な一連のエンドポイントが用意されており、本番環境やテスト/開発環境を問わずアプリケーションの監視を可能にします。具体的には以下の要素が含まれます:

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

セキュリティ設定の不備とは、ある種の包括的な用語であり、コードの不備ではなくアプリケーションの設定パラメータに起因して生じる一般的な脆弱性を指します。 これは非常に多岐にわたるテーマであり、技術インフラなどの要因に大きく依存します。設定ファイルの変更やコードの1行修正といった単純な解決策に見えることも多いですが、これらの脆弱性の影響と結果は深刻な場合があります。この脆弱性とその軽減方法について詳しくは、当社のガイドをご覧ください。

指示を表示する

サーバー要求の偽造

ts
let url = request.params.url ;

let response = http.get(url) ;
let render = response.render() ;

return 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>

マスアサインメントは、APIエンドポイントが関連オブジェクトのプロパティ変更をユーザーに制限しない脆弱性です。この脆弱性は、HTTPパラメータをモデルに自動バインドするライブラリ/フレームワークを使用し、そのモデルを検証なしにそのまま利用する際に発生する可能性があります。 リクエストとオブジェクトの自動バインディングは極めて有用な場合もありますが、モデルにユーザーがアクセスすべきでないプロパティが存在する場合、セキュリティ上の問題を引き起こす可能性があります。詳細はガイドラインを参照してください。

指示を表示する

セキュリティ設定の不備 - XXEの詳細

xml
< ? version xml = « 1.0 » ? >
< ! Élément extérieur DOCTYPE [
< ! ENTITY ExternalEntity SYSTEM « file : ///etc/passwd » >] >
<outerElement>&Entité externe ;</outerElement>

「XML外部エンティティ」(XXE)脆弱性は、XMLパーサーに関連するセキュリティ設定の誤りを指します。 XML規格では、ファイルやURLなどの「エンティティ」を参照する手段が含まれています。デフォルトでは、パーサーは外部エンティティを完全に解決するため、XML文書が攻撃者に対してファイルやその他の機密情報の漏洩を引き起こす可能性があります。詳細については完全なガイドラインをお読みください。

指示を表示する

射出 - 軌道通過

pseudo
let BaseFolder = « /var/www/api/documents/ » ;
let path = BaseFolder + request.params.filename ;

renvoie file.read (chemin) ;

パストラバーサルは、もう1つの比較的よく見られる注入型脆弱性です。これらは、URI(URL、ファイルパスなど)の構築において、完全に解決されたパスが意図されたルート外を指さないことを適切に保証していない場合に発生する傾向があります。 パストラバーサルの影響は、トラバーサルが発生するコンテキストと、実施された全体的な強化策に大きく依存します。詳細についてはガイドをお読みください。

指示を表示する

認証と認可

cs

//Assurez-vous que le comportement par défaut est d'authentifier les demandes et de vérifier si elles sont d'origine administrative
[Authentifier]
[Autoriser (« Admin »)]
classe publique SecureController : Controller
{

}

classe publique MyController : SecureController
{

//Remplace l'attribut Authorize hérité pour permettre à n'importe quel utilisateur d'accéder à la page

指示を表示する

インジェクション - XSS

``html
<!--- UNSAFE: The htmlSnippet will get interpreted without any escaping --->
@Html .Raw (extrait HTML)
```

クロスサイトスクリプティング(XSS)は、別のユーザーが使用するブラウザ上で攻撃者が制御するスクリプトを実行させる、別の種類のインジェクション脆弱性です。XSSはHTML/JavaScriptインジェクション脆弱性とも見なせます。遭遇する可能性のあるXSSの種類を見ていきましょう。

指示を表示する

インジェクション101

最も一般的なインジェクションの種類には以下が含まれます:

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

最もよく知られている脆弱性のカテゴリの一つは、一般的にインジェクション関連の脆弱性であり、特に誰もが驚くことのない、誰もが認める代表格:SQLインジェクションです。 技術の世界でSQLインジェクションの話を耳にしないことは難しいので、ここではその概要を説明します。インジェクションの欠陥について簡単に紹介しましょう。

指示を表示する

ファイルのダウンロード

chaîne publique UploadProfilePicture (FormFile UploadedFile)
{
//Génère le chemin pour enregistrer le fichier téléchargé dans
var path = $ ». /uploads/avatars/ {request.user.id}/{uploadedFile.FileName} » ;

//Sauvegarde du fichier
var LocalFile = File.OpenWrite (chemin) ;
LocalFile.write (UploadedFile.readToEnd ()) ;
Fichier local .Flush () ;
LocalFile.close () ;

//Mise à jour de la photo de profil
UserProfile.UpdateUserProfilePicture (request.User, chemin)

chemin de retour ;
}

アプリケーションでは、ユーザーがファイルをダウンロード(使用または単なる保存のため)できるようにする必要が、いずれかの時点で生じることは非常に一般的です。一見単純に思えるこの機能ですが、ファイルダウンロードの管理に伴う潜在的なリスクのため、その実装方法は非常に重要となる場合があります。詳細についてはガイドラインをお読みください。

指示を表示する

コマンドの注入

let ip = request.params.IPAddress ;

système(« ping" + ip) ;

コマンドインジェクションそのものについて検証しましょう。主にいくつかの異なる例に焦点を当て、実際の動作を把握しやすくします。復習として、コマンドインジェクションの脆弱性は、ユーザーの入力がオペレーティングシステムのコマンドの一部を利用する場合に発生します。詳細はガイドラインを参照してください。

指示を表示する