セキュアなコードを書く!エンジニア必見のサイバーセキュリティ学習プラン


セキュアなコードを書く!エンジニア必見のサイバーセキュリティ学習プラン

farhanashrafdev/90DaysOfCyberSecurity

2025-07-18

このGitHubリポジトリは、ソフトウェアエンジニアにとってまさに「隠れた宝」のような存在です。一見するとサイバーセキュリティの学習プランに見えますが、実は私たちが日々コードを書き、システムを構築する上で、非常に重要な「セキュリティ」という視点を体系的に身につけるための素晴らしいロードマップなんですよ。

ソフトウェアエンジニアがこの学習プランに取り組むことで、以下のようなメリットがあります。

よりセキュアなコードを書けるようになる!

セキュリティの基本概念(Network+, Security+)を学ぶことで、アプリケーションの設計段階からセキュリティを考慮できるようになります。例えば、SQLインジェクションやXSSといった一般的な脆弱性がなぜ発生し、どうすれば防げるのかを深く理解できます。

「ハッキング」の概念を学ぶことで、攻撃者の視点に立って自分のコードやシステムを見つめ直すことができるようになります。これは、バグを発見するのと同じくらい、あるいはそれ以上に重要なスキルです。

インフラストラクチャのセキュリティを理解できる!

LinuxやGitの知識は、開発環境やデプロイ環境のセキュリティを強化する上で不可欠です。例えば、Gitのコミット履歴から機密情報が漏洩しないようにする方法や、Linuxサーバーの適切な権限設定などを学べます。

AWSやAzureといったクラウド環境でのセキュリティ(Cloud Security)は、現代のソフトウェア開発において必須の知識です。クラウド上のリソースを安全に設定し、運用するためのベストプラクティスを習得できます。

問題解決能力が向上する!

Traffic Analysis(トラフィック分析)は、ネットワークの問題だけでなく、アプリケーションのパフォーマンス問題や不審な通信を特定する際にも役立ちます。Wiresharkなどのツールを使って、実際にデータがどのように流れているかを理解することは、デバッグ能力を格段に向上させます。

ELK Stack(Elasticsearch, Logstash, Kibana)は、ログ管理と分析のための強力なツールです。アプリケーションのログを効率的に収集・可視化し、セキュリティイベントだけでなく、エラーやパフォーマンスの異常を迅速に検知できるようになります。

キャリアの幅が広がる!

セキュリティの知識は、DevSecOpsエンジニア、セキュリティアナリスト、ペネトレーションテスターなど、より専門性の高い役割への道を開きます。

企業がソフトウェアエンジニアに求めるスキルとして、セキュリティ意識の高さはますます重要になっています。このプランを通じて得られる知識は、あなたの市場価値を高めるでしょう。

この学習プランを始めるのはとても簡単です。基本的なGitの知識があればすぐに取り組めます。

リポジトリをクローンする
まず、ターミナル(コマンドプロンプト)を開き、以下のコマンドを実行してリポジトリをあなたのローカル環境にコピーします。

git clone https://github.com/farhanashrafdev/90DaysOfCyberSecurity.git
cd 90DaysOfCyberSecurity

学習プランを確認する
クローンしたディレクトリに入ったら、README.mdLEARN.md ファイルを確認しましょう。README.mdにはプランの概要が、LEARN.mdには日ごとの詳細なタスクやリソースが記載されています。

毎日少しずつ進める
このプランは90日間で構成されており、毎日少しずつタスクが割り当てられています。焦らず、自分のペースで着実に学習を進めていくことが成功の鍵です。実践的なタスクも含まれているので、手を動かしながら学ぶことができますよ。

このリポジトリ自体は学習プランとリソースの集まりなので、直接的な「サンプルコード」というよりも、「このプランで学んだ知識を使って、ソフトウェアエンジニアがこんなコードを書けるようになる」という例をいくつかご紹介しますね。特にPythonはサイバーセキュリティ分野で非常に多用されるので、Pythonの例を挙げます。

ネットワークスキャンツール(NmapのPythonラッパー)

Nmapのようなツールを直接使うことも多いですが、Pythonで自動化したり、自分のアプリケーションに組み込んだりするために、以下のようなスクリプトを作成できるようになります。

import nmap

def scan_ports(target_ip, ports='1-1024'):
    """指定されたIPアドレスのポートをスキャンします。"""
    nm = nmap.PortScanner()
    print(f"{target_ip} のポート {ports} をスキャン中...")
    nm.scan(target_ip, ports)

    for host in nm.all_hosts():
        print(f"ホスト: {host} ({nm[host].hostname()})")
        print(f"状態: {nm[host].state()}")
        for proto in nm[host].all_protocols():
            print(f"プロトコル: {proto}")
            lport = nm[host][proto].keys()
            for port in sorted(lport):
                print(f"  ポート: {port}\t状態: {nm[host][proto][port]['state']}")

# 使い方:
# pip install python-nmap が必要です
# scan_ports('127.0.0.1', '22,80,443') # 自分の環境に合わせてIPアドレスを変更してください

シンプルなパスワードチェッカー

基本的なセキュリティ知識を使って、パスワードの強度をチェックするスクリプトを書くことができます。

import re

def check_password_strength(password):
    """パスワードの強度をチェックし、改善点を提案します。"""
    strength = 0
    feedback = []

    if len(password) < 8:
        feedback.append("パスワードは8文字以上にするべきです。")
    else:
        strength += 1

    if re.search(r"[a-z]", password):
        strength += 1
    else:
        feedback.append("小文字を含めるべきです。")

    if re.search(r"[A-Z]", password):
        strength += 1
    else:
        feedback.append("大文字を含めるべきです。")

    if re.search(r"\d", password):
        strength += 1
    else:
        feedback.append("数字を含めるべきです。")

    if re.search(r"[!@#$%^&*(),.?\":{}|<>]", password):
        strength += 1
    else:
        feedback.append("特殊文字を含めるべきです。")

    if strength < 3:
        print("パスワードは弱いです。")
    elif strength < 5:
        print("パスワードは普通です。")
    else:
        print("パスワードは強いです!")

    for f in feedback:
        print(f"- {f}")

# 使い方:
# check_password_strength("MyPass123!")
# check_password_strength("weak")

ファイルのハッシュ値検証スクリプト

ダウンロードしたファイルが改ざんされていないか、整合性を確認するためのスクリプトです。

import hashlib

def calculate_sha256(filepath):
    """ファイルのSHA256ハッシュ値を計算します。"""
    sha256_hash = hashlib.sha256()
    with open(filepath, "rb") as f:
        # チャンクごとに読み込み、大きなファイルでもメモリを消費しすぎないようにします
        for byte_block in iter(lambda: f.read(4096), b""):
            sha256_hash.update(byte_block)
    return sha256_hash.hexdigest()

def verify_file_integrity(filepath, expected_hash):
    """ファイルのハッシュ値を検証します。"""
    actual_hash = calculate_sha256(filepath)
    print(f"計算されたハッシュ値: {actual_hash}")
    print(f"期待されるハッシュ値: {expected_hash}")
    if actual_hash == expected_hash:
        print("ファイルの整合性はOKです!改ざんされていません。")
        return True
    else:
        print("ファイルのハッシュ値が一致しません!ファイルが改ざんされている可能性があります。")
        return False

# 使い方:
# まず適当なテキストファイルを作成してください(例: my_document.txt)
# with open("my_document.txt", "w") as f:
#     f.write("これはテストファイルです。\n")
#     f.write("セキュリティ学習、頑張りましょう!\n")

# # 計算されたハッシュ値を使って検証
# file_path = "my_document.txt"
# calculated_hash = calculate_sha256(file_path)
# print(f"元のファイルのハッシュ値: {calculated_hash}")
#
# # 検証してみる
# verify_file_integrity(file_path, calculated_hash)
#
# # わざと改ざんして検証
# # with open("my_document.txt", "a") as f:
# #     f.write("改ざん!\n")
# # verify_file_integrity(file_path, calculated_hash)

このfarhanashrafdev/90DaysOfCyberSecurity リポジトリは、まさにソフトウェアエンジニアがセキュリティの「動かぬ証拠」を手に入れ、セキュアなシステムを構築するための土台を築くのに最適な教材です。ぜひ、この機会にサイバーセキュリティの世界に足を踏み入れてみてくださいね!

関連リンク


farhanashrafdev/90DaysOfCyberSecurity




あなたのアプリの防御力診断:strixで始める次世代サイバーセキュリティテスト

usestrix/strixは、「あなたのアプリケーションのためのオープンソースAIハッカー」と銘打たれたツールです。簡単に言えば、AIの力を借りて、ソフトウェアのセキュリティテスト(特にペネトレーションテスト、侵入テスト)を自動化・高度化するためのフレームワークです。


腹が減っては、AIの脆弱性は見つけられぬ

「腹がへった. ..」今日も今日とて、五郎は商談で築地を訪れていた。商談相手のソフトウェア開発会社の社長は、やたらとセキュリティの話で熱くなっていた。「五郎さん、今の時代、セキュリティは必須ですよ。特にAIを開発しているなら、なおさらです。脆弱性を突かれて、せっかくのAIが台無しになってしまう…なんてことになったら、目も当てられませんからね!」


Kubernetesでの機密情報管理を自動化するツール

ソフトウェア開発において、データベースのパスワードやAPIキーなどの機密情報を安全に管理することは非常に重要です。Kubernetes環境では、これらの情報をKubernetes Secretsとして保存するのが一般的です。しかし、この方法にはいくつかの課題があります。


AI時代の新常識:GitHub Copilotの潜在能力を解き放つプロンプトエンジニアリング実践入門

ソフトウェアエンジニアの方々にとって、この「サザエさんのストーリー」のようなリポジトリがどのように役立ち、どのように導入・活用できるかを、分かりやすくフレンドリーに解説しますね。この「github/awesome-copilot」リポジトリは、例えるなら磯野家の「知恵袋」です。


脆弱性の闇を覗け!Metasploitで鍛えるソフトウェアエンジニアのセキュリティ魂

(立ち上がって、情熱的に身振り手振り)いいか、君たちは日々、素晴らしいソフトウェアを生み出している。だがな、その輝かしい作品に、攻撃者(アクター)の視点を取り入れているか? 表面的なテストだけではダメだ!その深い、深い、脆弱性の闇を覗き込む勇気を持て!


コードの悩みを解消!Gooseと歩む次世代開発

皆さん、AIエージェントと聞いて何を思い浮かべますか? コードの提案をしてくれるツール? それも素晴らしいですが、Gooseは一味違います。まるで、どんな難事件もさらりと解決する名探偵のように、皆さんの開発プロセスにおける「解けない謎」を鮮やかに解き明かしてくれるんです!


Stremio-web探偵団:モダンフロントエンドとアドオン連携の秘密

ご依頼いただいたStremio/stremio-webについて、コードとアーキテクチャの奥深くに潜り込み、ソフトウェアエンジニアの皆様にとってどのような「お宝」が隠されているのか、そしてどのように活用できるのかを、フレンドリーかつ丁寧に解説いたします‍♂。


CLI開発者のためのドキュメント革命: charmbracelet/glowで実現する「見せる」README

このツールは、コマンドラインインターフェース (CLI) 上で Markdown (マークダウン) ファイルをとても魅力的に、まるでウェブサイトのようにレンダリングできる優れものです。開発者にとって、さまざまな場面で「ちょっとした工夫」として役立ちますよ。


GitHub-readme-stats解説

ソフトウェアエンジニアの方にとって、anuraghazra/github-readme-stats がどのように役立つか、導入方法やサンプルコードを分かりやすく解説しますね。このツールを一言で言うと、「GitHubのプロフィールやREADMEを、あなたの開発実績を視覚的にアピールする場に変える魔法のツール」 です。 ‍♂