投稿

ウェブ・セキュリティ試験

WEBアプリケーションの脆弱性 このブログでも取り上げたSQLインジェクションや、クロスサイトスクリプティングはWEBアプリケーションの代表的な脆弱性で、WEBアプリケーションにはこの他にも様々な脆弱性、およびそれらを利用したサイバー攻撃があります。 このブログで取り上げた脆弱性 [PHP] WEBアプリケーションの脆弱性 - SQLインジェクション脆弱性と対策について [PHP] WEBアプリケーションの脆弱性 - XSS(クロスサイトスクリプティング)脆弱性と対策について そのほかの脆弱性、およびサイバー攻撃 サービス運用妨害(DoS) バッファオーバーフロー ディレクトリトラバーサル コマンドインジェクション ... 開発者はこれら一つ一つをしっかりと理解し、確実に対策していく必要があります。 そのほかの脆弱性についても、今後このブログで取り上げていこうと思います。 ウェブ・セキュリティ試験 WEBアプリケーションの脆弱性と対策を体系的に学び、スキルとして証明できる「ウェブ・セキュリティ試験」という試験が以下の2種がPHP技術者認定機構より配信されています。 PHP技術者認定機構 ウェブ・セキュリティ基礎試験(徳丸基礎試験) ウェブ・セキュリティ実務知識試験(徳丸実務試験) WEBアプリケーションの脆弱性を利用した情報漏洩・攻撃は近年でも発生し続けていて、この試験の注目度、重要性、需要もとても高まってきています。 私もウェブ・セキュリティの知識を身に着け証明するために、3月中に ウェブセキュリティ試験(徳丸試験)を受験します!

[PHP] WEBアプリケーションの脆弱性 - SQLインジェクション脆弱性と対策について

イメージ
WEBアプリケーションの脆弱性の一つである、SQLインジェクションについて、その手口と対策をまとめていきます。 SQLインジェクションは、クロスサイトスクリプティングと並んで、WEBアプリケーションにおける脆弱性の代表格とされており、近年でもこの脆弱性を利用した攻撃による情報漏洩が発生しています。 しかし、アプリケーション、またはインフラストラクチャーで対策することにより確実に防げるので、その仕組みと対策をしっかりと理解しておくことが大切です。 なお、クロスサイトスクリプティングについては、以下の記事にまとめています。 [PHP] WEBアプリケーションの脆弱性 - XSS(クロスサイトスクリプティング)脆弱性と対策について SQLインジェクションとは SQLインジェクションの仕組みはとても単純で、悪意のある攻撃者が脆弱性のあるWEBサイトを見つけ、「サイト上の入力フォーム等から、サイト側の意図しないSQLを送信し、不正なクエリを実行する」というものです。 仕組みは単純ですが、その種類と想定される被害は多岐にわたり、WEBサイトに深刻な被害をもたらします。 SQLインジェクションの概要図 SQLインジェクション脆弱性のコード もっとも簡単な例でSQLインジェクションの脆弱性を再現してみます。 コード例 test.html 以下はユーザー名とパスワードを入力してログインするための画面です。 <html> <head> <title>SQLインジェクション検証</title> </head> <body> <h1>ログイン画面</h1> <form action="/login.php" method="POST"> ユーザー名:<input type="text" name="email"/><br> パスワード:<input type="text" name="password"/><br>

[WIP][AWS]EC2でSpringBootアプリケーションを実行する

イメージ
SpringBootで開発したWebアプリケーションをEC2で実行するまでの手順をまとめます。 jarファイルとwarファイルの2通りの実行方法がありますので両方まとめます。主な違いは以下の通りです。 jarファイル 通常のJavaアプリケーションをパッケージングした内容で、SpringBootの場合、tomcatを内包している。そのため、jarファイル単独で実行できる。 warファイル Webアプリケーション向けにパッケージングされている。tomcat上にデプロイして実行する。 なお、EC2の構築については以下記事で構築したものを使います。 https://www.s-watanabe.work/2023/05/awsamazon-ec2.html 環境について EC2プラットフォーム Ubuntu 22.04.3 LTS ローカルビルド環境 Gradle 8.3 JDKバージョン (ローカル/EC2) openjdk version "17.0.9" 2023-10-17 jarファイルでの実行方法 ローカル(WSL)での作業 gradleインストール sudo add-apt-repository ppa:cwchien/gradle sudo apt update sudo apt upgrade gradle sudo apt autoremove 確認 $ gradle -v ------------------------------------------------------------ Gradle 8.3 ------------------------------------------------------------ jarファイル作成 build.gradle修正 以下を追加する。Main-Classはmainメソッドを持つクラスを指定する。 jar { manifest { attributes 'Main-Class': 'TestApplication'

[Python3]JupyterLab

イメージ
JupyterLabは、Webブラウザ上でPythonプログラムの実行や、実行結果の参照、ドキュメントの作成などが行えるインターフェースです。データ分析や、データの可視化、機械学習などで広く利用されています。 また、対応言語はPythonだけでなく、R言語やJuliaなど、データ分析に特化したプログラミング言語がサポートされています。 ここでは、このJupyterLabについて、使い方を簡単にまとめておきます。 インストール pip install jupyterlab 起動 JupyterLabの起動 起動コマンド jupyter lab 実行結果 $ jupyter lab [I 2023-10-30 23:13:45.900 ServerApp] Package jupyterlab took 0.0000s to import [I 2023-10-30 23:13:45.946 ServerApp] Package jupyter_lsp took 0.0452s to import (省略) Or copy and paste one of these URLs: http://localhost:8888/lab?token=f4b577bc69b906f303be605e5ee9ecb0350b7b5e7e285b31 http://127.0.0.1:8888/lab?token=f4b577bc69b906f303be605e5ee9ecb0350b7b5e7e285b31 起動画面 実行結果のコンソール上に表示された起動用のURLを開くと、以下のような画面が開きます。 基本的な使い方 Notebookを使う Pythonコードを実行する LuncherでNotebook > Python3をクリックすると、「Untitled.ipynb」というNotebookが開きます。ここへPythonコードを記述して実行することができます。 実行するにはコード上で「Shift+Enter」か、上段メニューの▶ボタンで実行します。 変数を展開する 前の実行結果を保持したまま、次のコードを記述して実行することができます。また、コードの最終行を変数で終わると、その変数の中身

[Python3]データ分析 pandasライブラリを使う、認定試験

pandasは、Pythonの強みでもあるデータ分析を行うための強力なライブラリです。読み方は「パンダス」と読みます。 ここでは、pandasのセットアップから基本的な使い方をまとめていきたいと思います。 事前準備 pandasライブラリのインストール インストールコマンド pip install pandas 確認 $ pip list | grep pandas pandas 2.0.3 使い方 データの取得 まずは分析対象となるデータを取得します。ここでは前回の記事で使用したMySQLからデータ取得するコードを使用します。 https://www.s-watanabe.work/2023/06/python3wslpython3db.html sql = "select id, email, name, birthdate from users;" cursor.execute(sql) users = cursor.fetchall() DataFrameの取得 pandasによるデータ分析では、DataFrameと呼ばれる独自のデータ構造を使って分析を行います。まずは取得したデータで、DataFrameオブジェクトを生成します。 rows = pandas.DataFrame(users) # 確認 print(rows) 実行結果 python3 exec.py 0 1 2 3 0 16 member01@example.com ユーザー名_01 2001-03-31 1 17 member02@example.com ユーザー名_02 2003-04-25 2 18 member03@example.com ユーザー名_03 1985-08-01 3 19 member04@example.com ユーザー名_04 1986-06-20 4 20 member05@example.com ユーザー名_05 1998-12-13 5 21 member06@example.com ユーザー名_06

[WIP][資格] AZ-500 Microsoft Azure Security Technologies対策

AZ-500について AZ-500は、Azureに関するセキュリティ管理者向けの試験です。クラウド、またはハイブリッド環境の管理に関する実践的な知識が問われます。 試験についての詳細は以下マイクロソフト社の公式ページで確認できます。 https://learn.microsoft.com/ja-jp/credentials/certifications/exams/az-500/ 試験について 試験情報 試験コード DP-300 試験名 Microsoft Certified: Azure Database Administrator Associate 合格ライン 700点 問題数 約45問 試験時間 120分 試験問題の構成 試験問題は以下の4つのパートに分かれていて、それぞれ解答を終えると後戻りはできません。 シナリオに対する問題 10問 データベースを運用する1つのシナリオが提示されて、それに対する様々な質問に回答する問題 独立した問題 33問 データベースの運用、保守、開発に関する様々な問題 ケーススタディ① 1問 あるシナリオに対する対応が適しているか・または可能かをYes/Noで答える問題(対応方法が3パターンある) ケーススタディ② 1問 上に同じ 学習方法 参考書 最短突破 Microsoft Azureセキュリティ テクノロジ[AZ-500]合格教本 AZ-500試験について ID/アクセス管理、プラットフォーム保護、セキュリティ運用、その他セキュリティ機能 演習問題・模擬試験 対策 いくつかは別ページとしてまとめました。 実際の試験の印象として特に重要と感じたのは、最小限の特権の原則を理解し、どのロールを割り当てるべきか問われる問題が多く見受けられました。 IDとアクセス

[Azure]ストレージセキュリティ

Azureのストレージサービスにおいて、セキュリティ機能を使用して安全にデータを保存・転送・アクセスする方法について Azureストレージサービス Azureのストレージサービスには以下の種類がある。 コンテナー (Blobストレージ) ファイル共有 (Azure Files) キューストレージ (Queue) テーブルストレージ (Table) これらは全てセキュリティで保護され、アクセス要求に対して承認が行われた際に、ユーザーまたはアプリケーションで利用することができる。 アクセス要求と認可の方法 匿名アクセス コンテナーに保存されたBlobデータに対して匿名のパブリック読み取りアクセスを行う。 Blobコンテナーのパブリックアクセスレベルを「匿名読み取りアクセス」に変更することで可能になる。 共有アクセスキー アカウントのアクセスキーとほかのパラメータを使用して生成された接続文字列を用いてアクセスする。 一定期間でキーを再生成しローテーションする運用が推奨される。そのため交換時のダウンタイムを防ぐため、キーは2種類用意されている。 SAS (Shared Access Signatures) ストレージへの制限付きアクセスを提供するSASトークンと呼ばれるURIパラメータを付与してアクセスすることができる。 SASを利用することで制限された必要最低限の権限を付与することができるうえ、SASの情報が漏れたとしてもセキュリティリスクを軽減することができる。 アカウントSAS、サービスSAS、ユーザー委任SASの3種類がある。 アカウントSAS ストレージアカウントに対する操作を提供する。以下の項目を設定できる。 使用できるサービス BLOB、ファイル、キュー、テーブル 使用できるリソース サービス、コンテナー、オブジェクト アクセス許可 読み取り、書き込み、削除、リスト、追加、作成、更新、プロセス、不変ストレージ 開始日時と有効期限 使用許可するIPアドレス 署名キー サービスSAS ストレージアカウントの特定のリソースに対する操作を提供する。以下の項目を設定できる。 署名キー 保存済みのアクセスポリシー アクセス許可 読み取り、書

[Azure]キーコンテナー (Azure Key Vault)

Key Vaultはアプリケーションやサービス内で使用する各種キー、パスワードなどの機密情報を安全に管理するための金庫のような役割を持つ。 例としてデータベース接続パスワードなどのような外部に漏洩したときに高いリスクを持つものを、Key Vaultで保管すると、高いセキュリティで保護され、アクセスを許可されたアプリケーションから必要な時に取得することができる。 価格プラン (SKU) と提供する機能 Key VaultはStandardとPremiumの2つの価格プランで提供される。PremiumはStandardの機能に加え、HSM (Hardware Security Module) を使用したキーの管理をサポートする。 KeyVaultで提供する機能は以下の通り シークレット管理 キー管理 証明書の管理 HSMを利用したキーの格納 Key Vaultでのデータ保管 キー管理 データの暗号化に使用する暗号化キーの作成と管理を行う。以下2種類のキーの作成を行う。 ソフトキー キーコンテナーによってアプリケーションから使用されるキー ハードキー HSMによってハードウェアから使用されるキー キーの確認 生成したキーはAzure Portal、Power Shell、az-cliで確認できる。 キーの確認方法 確認方法 詳細 Azure Portal Azure KeyVault > [対象のキーコンテナー] > Keys Azure Power Shell Get-AzKeyVaultKeyコマンドレット az-cli az keyvault key show az-cliの例: $ az keyvault key show \ --name {キー名} \ --vault-name {キーコンテナー名} { "attributes": { "created": "2023-01-01T08:00:00+00:00", "enabled"

[Azure]Azure Active Directry

Azure Active Directory (Azure AD) Azureの認証基盤で、クラウドサービスに対するシングルサインオンを提供する。 あらかじめAzure ADとの関連付けを行うことで、Microsoft以外のクラウドサービス、Google Workspace、Salesforce、自社サービスなどで利用できる。 Azure ADのライセンス Azure ADのライセンス形態 Free オブジェクト数に50,000の上限がある。 SLAは定義されていない。 Premium P1 オブジェクト数に上限はない。 99.99%のSLAを保証する。 グループに対するアクセス許可を提供する。 条件付きアクセスを提供する。 Premium P2 Premium P1に加え、Identity Protection、Privileged Identity Managementを提供する。 Identity Protection、Privileged Identity Managementは、Premium P2ライセンスでのみサポートされる。 認証セキュリティ 多要素認証 不正アクセス防止の目的で、ID/Passwordの情報に加えユーザーが所有するものを利用して本人確認を行う。 Microsoft Authenticatorアプリを利用した認証 SMSを利用した認証 通話による認証 パスワードレス認証 利便性を高めるため、パスワードを使用せず、デバイスのみを使用し認証を行う。 Microsoft Authenticatorアプリを利用した認証 アプリに表示される通知に応答することで認証を行う。 Windows Hello for Businessを利用した認証 Windowsにサインインする際の顔認証や指紋認証で本人確認を行い、Azure ADの認証を行う。Window

[Azure]コンテナセキュリティ

コンテナー コンテナーとは仮想化の一種で、アプリケーションのコードと関連する構成ファイルおよびライブラリ、そのアプリの実行に必要な依存関係などがまとめられた状態で実行できるため、さまざまな環境にデプロイできる。 また、コンテナーを仮想化し、1つのOS上で複数のコンテナーを起動することができる。これにより従来のサーバー仮想化よりも、手軽に素早くアプリケーションの展開、移動、削除などが可能になる。 Azureコンテナーの主なサービス ACI (Azure Container Instances) ACIはAzure上でコンテナーを動作させる環境で、タスクの自動化、ジョブの作成などの様々なシナリオ向けのソリューションを提供する。 ACIを構成する要素 イメージ コンテナーを構成する元になる要素で、OSとの関係性を維持するための情報やミドルウェア、実行環境などを含む。 Dockerfile イメージに必要な構成情報を定義するファイル。 コンテナー イメージから生成される実際のアプリケーションを含む環境。 コンテナーグループ 複数のコンテナーを組み合わせてグループ化したもの。 Azure Container Registry イメージを登録してACIで利用する際の保存場所になる。認証などのセキュリティ制御を加えることができる。 Azure Container Registry Azure Conteiner Registryを構成する要素 レジストリ レジストリを使用してイメージの登録と配布を行う。 リポジトリ レジストリ内のイメージをグループ化する。レジストリ内のイメージをまとめて、所有権の識別や管理に利用する。 アーティファクト リポジトリ内の個別のイメージを指す。 SKU (サービスレベル)毎の機能と制限 サービスレベルはBasic、Standard、Premiumの3種類で以下のように機能や制限が異なる。 リソース Basic Standard Premium 記憶域(GiB) 10 100 500 ストレージ制限(TiB) 20 20 2

[Azure] Azure ADにおけるアクセス制御

イメージ
RBAC ロールベースのアクセス制御 Azureでは、サブスクリプションやリソースグループなどの一部分だけを管理するためのアクセス制御が行えます。このように細かくロールを区切って運用管理を行うアクセス制御を、ロールベースのアクセス制御(RBAC)と呼びます。 RBACのしくみ RBACのアクセス制御モデルは、スコープとロールの組み合わせによって管理できることを決定する。 スコープ 管理が可能な範囲を示す。以下のレベルのいずれかを指定する。 管理グループ サブスクリプション リソースグループ 各リソース ロール ロールには実行できるアクション(読み取り、書き込み、削除など)を登録する。あらかじめいくつかのアクションを組み合わせて事前に用意されている組み込みロールと、管理者が作成するカスタムロールがある。 カスタム RBAC ロールを管理する機能は、ユーザーアクセス管理者ロールで行うことができる。(最小限の特権の原則) 組み込みロール 主な組み込みロール 所有者 (Owner) スコープの範囲内における、すべての管理作業が可能 共同作成者 (Contributor) スコープの範囲内における、アクセス許可設定を除くすべての管理作業が可能 閲覧者 (Reader) Azureリソースの設定の閲覧が可能 仮想マシン共同作成者 (Virtual Machin Contributer) Azure仮想マシンの管理作業が可能 ロール定義 ロールに定義した内容は、内部的にはjsonデータとして保存される。主な要素は以下の通り。 id ロールの一意のID、組み込みロールの場合はAzure全体で同じIDを持つ roleName ロールの名前 assignableScopes[] このロールで使用できるスコープを指定する文字列の配列 acsions[] ロールに対して許可するアクションの配列 notActions[] acsionsから除外するアクション(拒否するアクション)の配列 dataActions[] 対象のオブジェクト内のデータに対

[Azure] ホストセキュリティ

イメージ
ホストレベルのセキュリティとしては、仮想マシンに対してセキュリティ構成を行うことで保護することが可能になる。 Microsoft Defender for Cloud セキュリティポリシー、セキュリティ強化、リソースの保護のための推奨事項が提供される。 無償版と有償版があり、有償版の場合、提供される機能がプライベートクラウド、またはAzure以外のクラウドサービスまで拡張される。 主な機能 Microsoft Defender for Endpoint 各エンドポイントの情報を収集して状態を監視する。 EDR (Endpoint Detection and Response) エンドユーザーが利用するPCやサーバーなどセキュリティで保護すべき対象を、一元的に保護する仕組みを提供する。各マシンを監視し、不正な挙動を検知して抑制・アラート発砲などの対応を行うことができる。 脆弱性診断 仮想マシン、コンテナー、SQL Server、その他リソースなどの脆弱性の検出・管理・解決が可能になる。 セキュリティベンチマーク Azureセキュリティベンチマークでのセキュリティ制御と、ベストプラクティスを提供する。また、ニーズに合わせた標準や規則標準を適用することができる。 特権アクセスワークステーション (PAW) PAW(Privileged Access Workstation)は、攻撃の対象、もしくは踏み台となりやすい端末のセキュリティレベルを複数に分けて管理し役割に応じた端末を用意することでセキュリティを高める。 デバイスのセキュリティレベル 役割に応じて3つのセキュリティレベルを設けて、利用シーンに応じて使う端末を厳密に区別する。セキュリティレベルが上がると、ユーザー側で操作できる作業が減るため、結果として高いセキュリティを保持している。 以下の図のように、下からエンタープライズデバイス、特殊デバイス、特権デバイスの3つに分類され、上に行くほどセキュリティレベルが高くできる作業範囲が狭くなる。 エンタープライズデバイス システムを利用するための最低限のセキュリティを確保した上で、安全な環境を構成した企業向けのセキュリティレベル。任意のアプリケーションの実行やWeb閲覧、Eメールなど様々な操作が可能で、エンドユーザーや

[資格] DP-300 Azure Database Administrator対策

イメージ
DP-300について Azure Database Administrator試験は、オンプレミスのSQL Server、Azure SQL Database、Azure Managed Instanceの構築、設計に関する専門知識を問われる試験です。データベース管理者として認定されます。 https://learn.microsoft.com/en-us/certifications/azure-database-administrator-associate/ 試験について 試験情報 試験コード DP-300 試験名 Microsoft Certified: Azure Database Administrator Associate 合格ライン 700点 問題数 45問 試験時間 100分 ※確認中です。 試験問題の構成 試験問題は以下の4つのパートに分かれていて、それぞれ解答を終えると後戻りはできません。 シナリオに対する問題 10問 データベースを運用する1つのシナリオが提示されて、それに対する様々な質問に回答する問題 独立した問題 33問 データベースの運用、保守、開発に関する様々な問題 ケーススタディ① 1問 あるシナリオに対する対応が適しているか・または可能かをYes/Noで答える問題(対応方法が3パターンある) ケーススタディ② 1問 上に同じ 学習方法 現時点でAZ-300の日本語版の問題集や参考書などは存在しません。 対策方法としては、冒頭の試験についてのページにあるラーニングパスが有効なのでこちらで学習を進めていきます。 なおこのページから練習問題を無料で受けれますが、すべて英語です。英語に抵抗がなければこれも非常に有効だと思います。少しやってみましたが、私には無理でした。 参考書 DP-300についての参考書ではありませんが、SQL Server関連書籍はいくつか参考になりそうなものがあるので紹介しておきます

[Python3]WSLにPython3実行環境を整える、サンプルコード(DB接続)、認定試験

最近仕事でPythonに触れる機会がありましたので、WSL(Ubuntu)への導入からDB接続するまでの手順をまとめておきます。 また、Pythonは初めて触ったのですが、かなりとっつきやすいのでプログラミング初心者に進められるのも分かる気がします。シンプルで短いコードで記述できて、だれが書いても似たような読みやすいコードになるのではないかと思います。 今後はPythonについての記事も書いていこうと思います。 導入 パッケージの更新 sudo apt update sudo apt upgrade -y Python3のインストール Pythonの最新バージョンは3系になります。pipはPythonのライブラリをセットアップするコマンドなので、一緒にインストールします。 sudo apt install python3 python3-pip -y sudo pip3 install pip -U 確認 python3 --version Python 3.8.10 pip3 --version pip 23.0.1 from ~/.local/lib/python3.8/site-packages/pip (python 3.8) 対話モード 対話モードで実行する python3コマンドを引数なしで実行すると、対話モードで実行することができます。ここでは1行ずつコードを実行することができるので、簡単なコードの確認に使えます。 $ python3 Python 3.8.10 (default, May 26 2023, 14:05:08) [GCC 9.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> print(Hello Python) File "<stdin>", line 1 print(Hello Python) ^ SyntaxError: invalid syntax >>> print(&

[資格] AZ-204 Azure Developer Associate対策

イメージ
AZ-204について Azure Developer Associate試験は、Azureサービスを利用して、要件定義・設計・開発を行うために必要な知識を問われる試験です。 https://learn.microsoft.com/ja-jp/certifications/azure-developer/ 試験について 試験情報 試験コード AZ-204 試験名 Developing Solutions for Microsoft Azure 合格ライン 700点 問題数 45問 試験時間 100分 試験問題の構成 試験問題は以下の4つのパートに分かれていて、それぞれ解答を終えると後戻りはできません。 1. シナリオに対する問題 10問 Azureを運用する1つのシナリオが提示されて、それに対する様々な質問に回答する問題 2. 独立した問題 33問 Azureサービスの運用、保守、開発に関する様々な問題 3. ケーススタディ① 1問 あるシナリオに対する対応が適しているか・または可能かをYes/Noで答える問題(対応方法が3パターンある) 4. ケーススタディ② 1問 上に同じ プログラミング言語 試験問題に使用されるプログラミング言語は以下の二つからどちらかを選択します。 C# Python 学習方法 現時点でAZ-204の日本語版の問題集や参考書などは存在しません。 対策方法としては、冒頭の試験についてのページにあるラーニングパスが有効なのでこちらで学習を進めていきます。 なおこのページから練習問題を無料で受けれますが、すべて英語です。英語に抵抗がなければこれも非常に有効だと思います。少しやってみましたが、私には無理でした。 参考書 AZ-204についての参考書ではありませんが、Azure関連書籍はいくつか参考になりそうなものがあるので紹介しておきます。 Azure定番システム設計・実装・運用ガイド 改訂新版 App Service、