公共任務及び指針

実用性を高めたセキュリティコーディング

OWASP Top 10などのソフトウェア脆弱性を理解し緩和するためのセキュリティコーディングガイドラインを確認し、実際のアプリシミュレーションを用いた実践的なガイド付きトレーニングミッションについて詳しく学びましょう。

BGを学ぶ

すべての任務を確認する

もっと見る
生産性向上
SQLインジェクション
あるユーザーから、インターネットバンキングソリューションのトランザクション検索機能においてSQLインジェクション脆弱性が悪用可能であるとの報告を受けました。彼らは他のユーザーのトランザクションを閲覧できると述べ、攻撃者はこの脆弱性によりテーブル削除、他テーブルのデータ閲覧、データ挿入などあらゆる種類の悪意ある操作をデータベースに対して実行可能であると指摘しました。このタスクでは、ユーザーが実行した操作を再現してください。
生産性向上
Spring MvcRequestMatchers
2023年3月、Springは内部で発見された脆弱性CVE-2023-20860の修正版をリリースした。この脆弱性は、mvcRequestMatchersで二重のワイルドカード**を使用することで、Spring SecurityとSpring MVCの間でパターンの不一致を引き起こす可能性があるというものだ。これは最終的に、ユーザーが特定のエンドポイントに不正アクセスすることにつながります。いくつかのエンドポイントを持つ非常に単純化された銀行アプリケーションをセットアップしました。指示に従って、このアクセス制御の脆弱性の影響を再現してみてください。
生産性向上
サイキック シグニチャー - 既知の脆弱なコンポーネントの使用
CVE-2022-21449 에는 취약점을 가리키는 가장 멋진 별칭인 자바 사이킥 시그니처가 있습니다.그 이름은 어떻게 지어졌나요?닥터 후의 심문을 참고한 것이죠.이 빈 종이를 누구에게나 보여주면 기대하는 내용으로 가득 차게 되죠.JWT의 서명 검증에 영향을 미치는 ECDSA 알고리즘의 자바 (버전 15~18) 구현에서도 비슷한 일이 있었습니다.유효하지 않은 서명을 할 수 있지만 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のゼロデイ脆弱性(CVE-2021-44228) の発表はJavaコミュニティで大きな反響を呼びました。Log4Shellと呼ばれるこの脆弱性はLog4j v2バージョン2.0-beta9~2.14.1に影響を与え、リモートコード実行につながる可能性があります。脆弱性を再現できる環境を構築したため、その影響を直接確認できます。今すぐお試しください。
生産性向上
トロイの木馬ソース - 信頼できないソースのコンポーネントの使用
バイキング銀行の開発者の一人が、インターネット上の信頼できないソースからコードを無防備にコピーしました。このコードには潜在的に脆弱なコンポーネントが含まれており、クレジットカード管理のための管理者認証チェックの作成に役立ちます。管理者だけがこの権限を持つはずなのに、ユーザーがクレジットカードの限度額を変更していることが判明しました。このコードに何か問題があるようです。コードを調査する任務を遂行してください。
生産性向上
CodeSashbin - 安全でないパスワードリセット機能
CodeSashbinは世界最大のコードバージョン管理ホスティング企業の一つです。パスワード紛失プロセスに安全でないパスワード再設定機能の脆弱性があるという噂があります。権限のあるユーザーのパスワードを変更し、そのアカウントにアクセスできる可能性があります。この任務に飛び込み、問題を調査してみてください。
生産性向上
ChatGPTのクロスサイトスクリプティング(XSS)
このミッションは、人気のあるLLMの親しみやすいインターフェースを紹介し、2023年11月末に生成された実際のコードスニペットを活用します。ユーザーはこのスニペットを解釈し、意図した用途で使用した場合に発生する可能性のある潜在的なセキュリティリスクを調査できます。

全体ガイドラインを探す

検索条件:
フィルターを非表示にする
選択
フィルター表示
選択
フィルターを消去
タグ
スーパーアイコン [★]
トピック
もっと見る

ロギングおよびモニタリングが不十分である

ベストプラクティス:

機密機能に対する監査ログ
エラーログ
中央ログ保存場所
定義された期間のログ保持
PIIに対する定期的な監査ログ

ログ記録と監視は、問題が既に発生した際に考慮されないことが多いですが、実際には適切なログ記録と監視が行われないと、多大なコストが発生する可能性があります。極端な例を挙げれば、事故が発生した場合、 (セキュリティ関連の問題かどうかに関わらず)ログがほとんどない、あるいは全くない場合、実際に何が起こったのかを把握できません。一方で、過剰なデータを記録すると個人情報保護の問題が発生し、規制当局とのトラブルにつながる可能性があります。ロギングとモニタリングが不十分になることを防ぐためのベストプラクティスガイドラインをご覧ください。

ガイドラインを見る

既知の脆弱性があるコンポーネントの使用

{
“종속성”: {
“foo”: “1.0.0 - 2.9999.9999",
“바”: “>=1.0.2 <2.1.2"
}
}

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

ガイドラインを見る

SQLインジェクション

mysql.コネクタのインポート
db = mysql.connector.connect
#悪い練習です。これは学習目的のみです。避けてください!
(host="localhost", user="new_user", password="pass", db="sample")
cursor = db.curseer()
name = raw_input('名前を入力してください: ')
cur.fetchall() cur.execute("SELECT * FROM sample_data. ここで名前 = '%s';”%名前): print(行)
db.close()

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

ガイドラインを見る

誤ったセキュリティ構成

また、多くのフレームワークには、本番環境かテスト/開発環境かを問わず、アプリケーションを監視できるエンドポイントのセットが用意されています。これには以下が含まれる場合があります。

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

セキュリティ構成エラーは、誤ったコードではなく、アプリケーションの構成設定によって引き起こされる一般的な脆弱性を包括的に指す用語です。これは広範なテーマであり、技術スタックなどの要素に大きく依存します。これらの問題を解決することは、構成ファイルやコードの一行を変更するといった単純な作業に見えますが、これらの脆弱性の影響と結果は深刻な場合があります。この脆弱性とそれを緩和する方法について詳しく知るには、ガイドラインをお読みください。

ガイドラインを見る

サーバー側のリクエスト偽造

ts
url = 요청.params.url로 설정;

응답 = http.get (url) 이라고 가정해 봅시다.
렌더 = 리스폰스.렌더 () 라고 하자;

반환 렌더링. 내보내기 ();

サーバーサイドリクエストフォージェリ(SSRF)の脆弱性は、ユーザーがアプリケーションに攻撃者が指定したドメインへの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
<?xml 버전="1.0"?>
<!문서 유형 외부 요소 [
<!] >
<outerElement>&외부 엔티티;</outerElement>

XML外部エンティティ(XXE)脆弱性クラスは、XMLパーサーに関連する誤ったセキュリティ構成です。XML標準には、ファイルやURLなどの「オブジェクト」を参照する方法が含まれています。パーサーが外部エンティティを完全に検証することがデフォルトである場合が多く、これによりXML文書を通じてファイルやその他の機密情報が潜在的な攻撃者に公開される可能性があります。詳細については、完全なガイドラインをお読みください。

ガイドラインを見る

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


ベースフォルダ = “/var/www/api/ドキュメント/”に設定;
パス = ベースフォルダ + リクエスト.params.ファイル名;

ファイルを読み込み返却;

パスナビゲーションは、非常に一般的な別のタイプのインジェクション脆弱性です。URLやファイルパスなどのURIを生成する際に、完全に検証されたパスが意図したパスのルート外を指さないよう適切に検証されていない場合に、この問題が発生する傾向があります。パスナビゲーション脆弱性の影響は、ナビゲーションが発生した場所のコンテキストと実施された全体的なセキュリティ強化によって大きく異なります。ガイドラインを読んで詳細を確認してください。

ガイドラインを見る

認証および認可

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インジェクション)
コマンドインジェクション
コードインジェクション

가장 잘 알려진 취약점 중 하나가 인젝션 취약점인 이름, 그 중에서도 놀랍게도 그 후손인 SQL 인젝션 (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.IPアドレスと仮定します。

system("ping" + ip);

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

ガイドラインを見る