コンピュータ化システムバリデーションってなんだろう?
- ピュータ化システムバリデーションは、製薬業界や医療機器業界で使われる品質保証のことです。
- 目的は、システムが意図したとおりに動作することを保証することです。
- そんなCSVにはガイドラインがあります。
- 製薬や医療業界のシステム開発で使われる工程の略称
- 歴史
ピュータ化システムバリデーションは、製薬業界や医療機器業界で使われる品質保証のことです。
- 英語 : Computerized System Validation
- 略称 : CSV
一般工業製品の品質保証となぜ分けているのか?
一般工業製品の場合は「価格」と「品質」が比例します。
安ければある程度の不良は許容されます。
医薬品は、生命にかかわるため不良は許容されないから
医薬品の場合は「価格」にかかわらず「不良」は許容されません。
そのため、世界的にCSVへの取組が求められています。
日本医療機能評価機構のサイトでシステムに関わる医療事故を見ることができます。
日本医療機能評価機構のサイトから「分析テーマ」で「その他」を選ぶと見られます。
www.med-safe.jp
GMP省令が基礎となっています。
GMPの対象のうち製薬や医療に関わるコンピュータ化システムが対象になります。
医療機器に組み込まれるシステムだけではなく、文書を管理するシステムまで
医療に関わる広範囲のシステムが対象になります。
2. 適用の範囲
このガイドラインは、コンピュータ化システムを使用してGQP省令及びGMP省令が適用され る業務を行う製造販売業者等に適用する。
このガイドラインの対象となるコンピュータ化システムの例として、(1)~(7)が考えられる。また、対象外となるコンピュータ化システムは別紙2に記載する。
(1) 医薬品、医薬部外品の市場への出荷の可否の決定に係るシステム及び市場への出荷に係る記録を 作成、保存管理するためのシステム
(2) 製造指図書、製造に関する記録等を作成及び保存管理するためのシステム
(3) 製造工程を制御又は管理するためのシステム及びその管理データを保存管理するためのシステム
(4) 原材料及び製品の保管、出納等の生産を管理するシステム
(5) 品質試験に用いる機器を制御又は管理するためのシステム並びに品質試験結果及び管理データを保存管理するためのシステム
(6) 空調、製造用水製造設備など、製品の品質に重大な影響を及ぼす可能性のある製造支援設備・施設を制御又は管理するためのシステム及びその管理データを保存管理するためのシステム
(7) 文書(手順書類、品質標準書、製品標準書等)を作成、承認、保存管理するためのシステム
医薬品・医薬部外品製造販売業者等におけるコンピュータ化システム適正管理ガイドライン
バリデーションとは、製造工程及びその手順を検証して文書化することです。
検証を行い証拠となる文書を作成することにより、継続的に証拠を積み上げ高度な品質を保証していくことをバリデーションといいます。
「バリデーション」とは、製造所の構造設備並びに手順、工程その他の製造管理及び品質管理の方法が期待される結果を与えることを検証し、これを文書とすることをいう。
医薬品及び医薬部外品の製造管理及び品質管理の基準に関する省令
差分の機能仕様書や設計仕様書を作成してはならない。
最新の当該システムの機能がどうなっているかを一瞥して分かるようにしておかなければならないのである。<省略>
計画書、報告書、仕様書等は、最新バージョンのみをバインダーに綴じておかなければならない。
それに対して、テストスクリプトやテストログは全てのバージョンをバインダーに綴じておかなければならない。
なぜならば、最新のテストログのみを綴じておくとすべてのテストが合格しているからである。
規制当局のレビュでは、成功したテストを調査したいのではなく、エラーになったテストを参照し、解決された経緯を調査したいためである。
【ワンポイント】CSVにおける成果物の種類と管理方法 – eCompress
バリデーションの対象となるのは、開発したシステム自体だけではなくそれを使用する業務プロセスも含みます。
コンピュータ化されたシステム(Computerized System)とは、「コンピュータシステム」と「業務プロセス」を統合したものである。
「コンピュータシステム」は、ハードウェアとソフトウェアから構成され「業務プロセス」は、人、標準業務手順書(SOP)と、設備(例えば測定機器、CRF、筆記具など)から構成される。
コンピュータバリデーションとは イーコンプライアンス
目的は、システムが意図したとおりに動作することを保証することです。
「医薬品、医薬部外品、化粧品及び医療機器の品質管理の基準に関する省令」及びGMP省令に基づく業務を行うためのコンピュータ化システムの要件を明確にし、
コンピュータ化システムが意図したとおりに動作することを保証するため、これを開発する際に必要な事項、これを検証するバリデーションに関する事項及び運用管理に関する遵守事項を定め、GQP省令及びGMP省令の適正な実施の確保を図ることを目的とする。このガイドラインにおいては、コンピュータ化システムの開発から、検証、運用管理及び廃棄までの流れを総合してコンピュータ化システムのライフサイクルという。医薬品・医薬部外品製造販売業者等におけるコンピュータ化システム適正管理ガイドライン
薬や医療機器の品質保証のために、システムの開発から導入および廃棄までを検証・文書化します。
CSVで重要なことは、開発から廃棄までを検証して証拠として文書を残すことです。
それによって薬や医療機器の品質に問題がないことを保証します。
CSVではドキュメントがたくさん必要となるため、ユーザ企業とシステムを作る企業の間で成果物のイメージに相違がないことを確認することが作業量のズレ防止に大きく繋がります。
サプライヤが、ユーザ企業から CSV 活動のサポート(アウトソーシング)に関する見積依頼を受けた際に困る点を次に例示する。
●漠然とした要求で何をサポートして欲しいのかがよくわからない
●ユーザ企業とサプライヤの役割分担と責任範囲が明確になっていない
● CSV に関する規範が明確になっていない
● CSV を行うコンピュータ化システムに関する情報が不十分である(省略)
サプライヤが精度の高い見積を行う上で最低限必要な情報を、次に示す。
●当該コンピュータ化システムがどの規制に準拠すればよいのか
●CSV 活動はユーザ企業の規定あるいはサプライヤの方法に任せるのか
●当該コンピュータ化システムの GAMP のカテゴリ分類、システム規模や複雑さ
●成果物(バリデーションドキュメント)
CSV におけるサプライヤの役割
そんなCSVにはガイドラインがあります。
国際的にはGAMPというものがあります。
- 正式 : Good Automated Manufacturing Practice
ISPE(国際製薬技術協会)が作っていて、欧米ではこのGAMPの考え方が広く使われていて世界標準的なガイドラインです。
日本には「医薬品・医薬部外品製造販売業者等におけるコンピュータ化システム適正管理ガイドライン」というものがあります。
ガイドラインなので法的拘束力はありませんが、海外のガイドラインとも整合性があり世界的にも通用するものです。
GAMPとどう違うかはよくわかりません。
このガイドラインは欧米のGAMP5やPIC/S等のCSVガイドラインと整合性があり、コンピュータ化システムの開発から検証、運用、廃棄までのライフサイクルの考え方を採用しています。
CSVとは。コンピュータ化システムバリデーションとは
製薬や医療業界のシステム開発で使われる工程の略称
各工程の名前や略称は会社やプロジェクトによって異なりますが、CSVを実施している製薬や医療業界ではGAMP4の用語を各工程の略称として使用していることがあります。
最新のGAMP5ではこの略称の一部は記載されなくなったためいつかなくなるかもしれませんが・・・。
日本語の工程名 | (GMP4の略称)英語の工程名 | ポイント |
---|---|---|
設計適格性確認 | (DQ)Design Qualification | テスト工程になって仕様変更が発生しないよう開発ベンダは「作成する要求仕様書」と供給業者から提出される「設計仕様書」が合致しているかどうかを確認し、その記録を残すことが重要 |
ユーザ要求仕様 | (URS)User Required Specification | 要求仕様書の作成には関係部門が連携して、必要事項を漏れなくまとめていくことが大切 |
システム機能仕様 | (FS)Functional Specification | 作成はサプライヤがしてもそのレビューと承認はユーザ企業(製薬企業、医療機器企業)の責任である |
システム設計仕様 | (DS)Design Specification | - |
実装/単体テスト | - | - |
据付時適格性確認(結合テスト) | (IQ)Installation Qualification | 設計仕様書等に記載された通りに据え付けられ、プログラムがインストールされたことを確認して記録を残す |
運転時適格性確認(機能テスト) | (OQ)Operational Qualification | |
性能適格性確認(要件テスト) | (PQ)Performance Qualification | 承認された条件下で作業を行って動作できることを確認して記録を残す |
SlackにAWSとPythonを使って簡単なアプリを作る記録
- このサイトのやり方でアプリを作る
- AWSにインスタンスを作成する
- Slackで新規にアプリとボットユーザを作成する
- AWSでLambda関数からCloudWatchにデバッグ用のログを出力するためのIAMロールを追加する
- AWSでSlack Event APIの認証を行うLambda関数を作成する
- AWSで新規にAPI Gatawayを作成する
- Slackで作成したAPIを設定する
- ボットユーザをワークスペースに追加する
- ボットユーザがメッセージを投稿する機能を作る
- メッセージを投稿して動かしてみる
このサイトのやり方でアプリを作る
Slackで新規にアプリとボットユーザを作成する
- 「Create New App」ボタンから新規アプリを作成する。
- サイドメニューの[Bot Users]から新規ボットユーザを作成する。
AWSでSlack Event APIの認証を行うLambda関数を作成する
AWSで新規にAPI Gatawayを作成する
Lambda関数を叩くためのエンドポイントとなるAPIを作成する
APIにPOSTメソッドを作成する
デプロイしてエンドポイントを作成する
- 画面上部にエンドポイントとなるURLが表示されます。
テストする
-
- [Request Body]には、message.channels event | Slackの内容を入力します。
Slackで作成したAPIを設定する
- サイドメニューの[Event Subscriptions]を選択する。
- [Enable Events]を「On」にする。
- [Request URL]にエンドポイントとなるURLを入力する。
- [Subscribe to Bot Events]に「message.channels」か「message.groups」を追加する。
- [Save Changes]ボタンで保存する。
「message.channels」を設定することでボットユーザが参加しているパブリックチャンネルに投稿されたメッセージを取得できる
「message.groups」を設定することでボットユーザが参加しているプライベートチャネルに投稿されたメッセージを取得できる
パブリックチャンネルかプライベートチャネルかを見分ける簡単な方法
Slackの画面横に表示されているチャネル名の横にあるマークを見るとわかる。get.slack.help
ボットユーザをワークスペースに追加する
アプリをインストールする
チャネルにボットを参加させる
メッセージをチャネルに投げるとAWSのCloudwatchのLogに内容が出力される
START RequestId: 24..................... Version: $LATEST [INFO] 2019-05-08T06:11:48.565Z 24...................... { "token": "hogehoge", "team_id": "hogehoge", "api_app_id": "hogehoge", "event": { "client_msg_id": "hogehoge", "type": "message", "text": "chanelとgroupの違いがよくわからない", "user": "投稿したユーザID", "ts": "1557295907.016900", "channel": "チャネルID", "event_ts": "1557295907.016900", "channel_type": "group" }, "type": "event_callback", "event_id": "イベントID", "event_time": 1557295907, "authed_users": [ "hogehoge" ] }
ログはLambda関数に書いた「logging.info(json.dumps(slack_event))」で出力される
ボットユーザがメッセージを投稿する機能を作る
AWSにOAuth Tokenを設定する環境変数を設定する
Lambd関数を更新する
- [Function code]に参考にしているQiitaページに記載されているコードを転記する。
- [Save]ボタンで保存する。
メッセージの投稿には、ボットユーザがメッセージを投稿できるchat.postMessageを使用しています。
メッセージを投稿して動かしてみる
MacのPhpStormでLaravelプロジェクトでPHPUnitをできるようにする記録
- 以前、Laravelのプロジェクトを作ったことがありましたが、今回はPhpStormを使ってやります。
- PhpStormをインストールします。
- 新規にComposerプロジェクトを作成します。
- Xdebugをインストールします。
- プロジェクトを設定します。
- PHPUnitの設定をします。
- テストコードを作る
- PHPUnitでテストコードを実行します。
- 環境
- macOS Mojave バージョン10.14.4
- Composer version 1.8.0
以前、Laravelのプロジェクトを作ったことがありましたが、今回はPhpStormを使ってやります。
PhpStormをインストールします。
- JetBeanのPHPStormのサイトからダウンロードします。
- ダウンロードしたPhpStorm-yyyy.x.x.dmgをクリックします。
新規にComposerプロジェクトを作成します。
# 事前にインストールしてあるComposerの場所を確認 $ which composer /usr/local/bin/composer
Composerがインストールされていない場合はPhpStormのサイトを参照して作成します。
以下サイトの[新しいComposerプロジェクトを作成するには] > [2. ダイアログで、プロジェクトのパラメータを指定します。] > [b. Composerコマンドの実行方法を選択します。]を参照
pleiades.io
Command line parameterで指定した「–prefer-dist」はLaravelをZIPでダウンロードするということです。
# こんなコマンドが動きます。 /usr/local/bin/composer create-project laravel/laravel /path/to/project/directory/tryPhp/composer --prefer-dist
Laravelのバージョンを確認します。
# ウィンドウの下にある[Terminal]またはMacのターミナルで確認します。 $ php artisan -V Laravel Framework 5.8.14
LaravelにくっついているサーバでLaravelの初期画面を確認します。
# サーバを起動します $ php artisan serve Laravel development server started: <http://127.0.0.1:8000> # 表示されたURLにブラウザでアクセスします。 [Wed Apr 24 23:58:16 2019] 127.0.0.1:51584 [200]: /favicon.ico
プロジェクトを設定します。
PHP language levelを使っているPHPのバージョンに合わせます。
# [PHP language level]用に使っているPHPのバージョンを確認します $ php --version PHP 7.3.1 (cli) (built: Jan 10 2019 13:15:37) ( NTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.3.1, Copyright (c) 1998-2018 Zend Technologies with Xdebug v2.7.2, Copyright (c) 2002-2019, by Derick Rethans with Zend OPcache v7.3.1, Copyright (c) 1999-2018, by Zend Technologies # [CLI Interpreter]用に使っているPHPのディレクトリを確認します $ which php /usr/local/bin/php $ ls -la /usr/local/bin/ | grep php # 省略 lrwxr-xr-x 1 mana admin 27 1 20 14:09 php -> ../Cellar/php/7.3.1/bin/php # 省略
PHPUnitは、プロジェクトを作ったときに配置されています。
プロジェクトの直下にあるcomposer.jsonを確認するとデフォルトでインストールされています。
venderディレクトリにもphpunitディレクトリが配置されています。
"require-dev": { "beyondcode/laravel-dump-server": "^1.0", "filp/whoops": "^2.0", "fzaninotto/faker": "^1.4", "mockery/mockery": "^1.0", "nunomaduro/collision": "^2.0", "phpunit/phpunit": "^7.5" },
$ ls -l vendor/ | grep phpunit drwxr-xr-x@ 8 mana staff 256 4 24 23:47 phpunit
PHPUnitの設定をします。
(Macのターミナルを使う場合)PHPUnitのパスを通します。
# .bash_profileにphpunitのパスを書いて $ echo 'export PATH="/Path/To/vendor/phpunit/phpunit:$PATH"' >> ~/.bash_profile # 反映して $ source ~/.bash_profile # 確認します。 $ phpunit --version PHPUnit 7.5.9 by Sebastian Bergmann and contributors.
パスはbin配下ではなくphpunit配下を指定します。
以前PHPStormを使わなかった時は、PHPUnitのPathにbin配下を指定しました。
$ echo 'export PATH="/Path/To/vendor/bin/phpunit:$PATH"' >> ~/.bash_profile
今回はうまくいきませんでした。
$ echo 'export PATH="/Path/To/vendor/bin/phpunit:$PATH"' >> ~/.bash_profile $ source ~/.bash_profile $ phpunit --version -bash: phpunit: command not found
シンボリックリンクが貼ってあるけどだめなのですね。
$ ls -la vendor/bin/ total 32 drwxr-xr-x@ 6 mana staff 192 5 6 14:50 . drwxr-xr-x@ 47 mana staff 1504 5 6 14:43 .. -rwxr-xr-x@ 1 mana staff 6028 2 17 05:54 php-parse lrwxr-xr-x 1 mana staff 26 5 6 14:43 phpunit -> ../phpunit/phpunit/phpunit -rwxr-xr-x@ 1 mana staff 4305 10 14 2018 psysh lrwxr-xr-x 1 mana staff 51 5 6 14:43 var-dump-server -> ../symfony/var-dumper/Resources/bin/var-dump-server
composer.jsonにautoloadの定義があることを確認します。
定義がなければ環境に合わせて定義します。
"autoload": { "psr-4": { "App\\": "app/" }, "classmap": [ "database/seeds", "database/factories" ] }, "autoload-dev": { "psr-4": { "Tests\\": "tests/" } },
対応付けのためのクラスマップ生成を行います。
# クラスマップ生成 $ composer dump-autoload Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: beyondcode/laravel-dump-server Discovered Package: fideloper/proxy Discovered Package: laravel/nexmo-notification-channel Discovered Package: laravel/slack-notification-channel Discovered Package: laravel/tinker Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. Generated optimized autoload files containing 3759 classes # 確認します $ cat vendor/composer/autoload_psr4.php <?php // autoload_psr4.php @generated by Composer $vendorDir = dirname(dirname(__FILE__)); $baseDir = dirname($vendorDir); return array( 'phpDocumentor\\Reflection\\' => array($vendorDir . '/phpdocumentor/reflection-common/src', $vendorDir . '/phpdocumentor/reflection-docblock/src', $vendorDir . '/phpdocumentor/type-resolver/src'), 'Zend\\Diactoros\\' => array($vendorDir . '/zendframework/zend-diactoros/src'), 'XdgBaseDir\\' => array($vendorDir . '/dnoegel/php-xdg-base-dir/src'), 'Whoops\\' => array($vendorDir . '/filp/whoops/src/Whoops'), 'Webmozart\\Assert\\' => array($vendorDir . '/webmozart/assert/src'), 'TijsVerkoyen\\CssToInlineStyles\\' => array($vendorDir . '/tijsverkoyen/css-to-inline-styles/src'), 'Tests\\' => array($baseDir . '/tests'), 'Symfony\\Polyfill\\Php72\\' => array($vendorDir . '/symfony/polyfill-php72'), 'Symfony\\Polyfill\\Mbstring\\' => array($vendorDir . '/symfony/polyfill-mbstring'), 'Symfony\\Polyfill\\Intl\\Idn\\' => array($vendorDir . '/symfony/polyfill-intl-idn'), 'Symfony\\Polyfill\\Iconv\\' => array($vendorDir . '/symfony/polyfill-iconv'), 'Symfony\\Polyfill\\Ctype\\' => array($vendorDir . '/symfony/polyfill-ctype'), 'Symfony\\Contracts\\' => array($vendorDir . '/symfony/contracts'), 'Symfony\\Component\\VarDumper\\' => array($vendorDir . '/symfony/var-dumper'), 'Symfony\\Component\\Translation\\' => array($vendorDir . '/symfony/translation'), 'Symfony\\Component\\Routing\\' => array($vendorDir . '/symfony/routing'), 'Symfony\\Component\\Process\\' => array($vendorDir . '/symfony/process'), 'Symfony\\Component\\HttpKernel\\' => array($vendorDir . '/symfony/http-kernel'), 'Symfony\\Component\\HttpFoundation\\' => array($vendorDir . '/symfony/http-foundation'), 'Symfony\\Component\\Finder\\' => array($vendorDir . '/symfony/finder'), 'Symfony\\Component\\EventDispatcher\\' => array($vendorDir . '/symfony/event-dispatcher'), 'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'), 'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'), 'Symfony\\Component\\Console\\' => array($vendorDir . '/symfony/console'), 'Ramsey\\Uuid\\' => array($vendorDir . '/ramsey/uuid/src'), 'Psy\\' => array($vendorDir . '/psy/psysh/src'), 'Psr\\SimpleCache\\' => array($vendorDir . '/psr/simple-cache/src'), 'Psr\\Log\\' => array($vendorDir . '/psr/log/Psr/Log'), 'Psr\\Http\\Message\\' => array($vendorDir . '/psr/http-message/src'), 'Psr\\Container\\' => array($vendorDir . '/psr/container/src'), 'PhpParser\\' => array($vendorDir . '/nikic/php-parser/lib/PhpParser'), 'Opis\\Closure\\' => array($vendorDir . '/opis/closure/src'), 'NunoMaduro\\Collision\\' => array($vendorDir . '/nunomaduro/collision/src'), 'Nexmo\\' => array($vendorDir . '/nexmo/client/src'), 'Monolog\\' => array($vendorDir . '/monolog/monolog/src/Monolog'), 'League\\Flysystem\\' => array($vendorDir . '/league/flysystem/src'), 'Lcobucci\\JWT\\' => array($vendorDir . '/lcobucci/jwt/src'), 'Laravel\\Tinker\\' => array($vendorDir . '/laravel/tinker/src'), 'JakubOnderka\\PhpConsoleHighlighter\\' => array($vendorDir . '/jakub-onderka/php-console-highlighter/src'), 'JakubOnderka\\PhpConsoleColor\\' => array($vendorDir . '/jakub-onderka/php-console-color/src'), 'Illuminate\\Notifications\\' => array($vendorDir . '/laravel/nexmo-notification-channel/src', $vendorDir . '/laravel/slack-notification-channel/src'), 'Illuminate\\' => array($vendorDir . '/laravel/framework/src/Illuminate'), 'Http\\Promise\\' => array($vendorDir . '/php-http/promise/src'), 'Http\\Client\\' => array($vendorDir . '/php-http/httplug/src'), 'Http\\Adapter\\Guzzle6\\' => array($vendorDir . '/php-http/guzzle6-adapter/src'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), 'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'), 'Fideloper\\Proxy\\' => array($vendorDir . '/fideloper/proxy/src'), 'Faker\\' => array($vendorDir . '/fzaninotto/faker/src/Faker'), 'Egulias\\EmailValidator\\' => array($vendorDir . '/egulias/email-validator/EmailValidator'), 'Dotenv\\' => array($vendorDir . '/vlucas/phpdotenv/src'), 'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src/Doctrine/Instantiator'), 'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib/Doctrine/Common/Inflector'), 'DeepCopy\\' => array($vendorDir . '/myclabs/deep-copy/src/DeepCopy'), 'Cron\\' => array($vendorDir . '/dragonmantank/cron-expression/src/Cron'), 'BeyondCode\\DumpServer\\' => array($vendorDir . '/beyondcode/laravel-dump-server/src'), 'App\\' => array($baseDir . '/app'), '' => array($vendorDir . '/nesbot/carbon/src'), );
PHPUnitの設定ファイルとなるphpunit.xmlを確認します。
自動でできるなんて素敵ですね。
<?xml version="1.0" encoding="UTF-8"?> <phpunit backupGlobals="false" backupStaticAttributes="false" bootstrap="vendor/autoload.php" colors="true" convertErrorsToExceptions="true" convertNoticesToExceptions="true" convertWarningsToExceptions="true" processIsolation="false" stopOnFailure="false"> <testsuites> <testsuite name="Unit"> <directory suffix="Test.php">./tests/Unit</directory> </testsuite> <testsuite name="Feature"> <directory suffix="Test.php">./tests/Feature</directory> </testsuite> </testsuites> <filter> <whitelist processUncoveredFilesFromWhitelist="true"> <directory suffix=".php">./app</directory> </whitelist> </filter> <php> <env name="APP_ENV" value="testing"/> <env name="BCRYPT_ROUNDS" value="4"/> <env name="CACHE_DRIVER" value="array"/> <env name="MAIL_DRIVER" value="array"/> <env name="QUEUE_CONNECTION" value="sync"/> <env name="SESSION_DRIVER" value="array"/> </php> </phpunit>
PhpStormにPHPUnitを設定します。
テストコードを作る
以前作ったファイルを流用します。なのでLaravelのディレクトリ構成とかからとっても外れています。
qiita.com
テスト対象ソースのエディタ上からテストクラスを生成します。
継承しているクラスをPHPUnit\Framework\TestCaseへ変更します。
自動生成時はHPUnit_Framework_TestCaseとなっていますがエラーとなるため変更します。
tomomik.hatenablog.com
Macのデフォルトではバックスラッシュが円マークになる事があるので以下のサイトを見てバックスラッシュで記載します。
Macにおけるバックスラッシュ(\)の入力方法 - Qiita
<?php namespace App; use PHPUnit\Framework\TestCase; class controlStdClassArrayTest extends TestCase { // 省略
自動生成されたメソッドへテストコードを記載して保存します。
<?php namespace App; use PHPUnit\Framework\TestCase; class controlStdClassArrayTest extends TestCase { public function testCreateStdClassArrayNew() { $target = new controlStdClassArray(); $stdList = $target->createStdClassArrayNew(); foreach ($stdList as $std) { $this->assertInstanceOf(\stdClass::class, $std); } } // 省略
作ったテストコード用に設定を追加します。
はじめてAWSのEC2でUbuntuを作ってSSHとリモートデスクトップで接続した時の記録
ドキュメントどおりにやっていれば超簡単にできます。
が、無駄につまずくので記録します。
EC2インスタンスを作成してSSH接続します。
EC2インスタンスを作成します。
参考 : 仮想マシンの起動
- AWSマネジメントコンソールの[EC2]からEC2 コンソールを表示します。
- [インスタンス]でインスタンスの一覧を表示します。
- [インスタンスの作成]ボタンで作成画面を表示します。
- [次のステップ〜]ボタンで進めながら内容を入力していきます。以下以外は規定値のままとしました。
- [確認と作成]ボタンで確認画面を表示して内容を確認します。
- [起動]ボタンで鍵の作成について選択して[インスタンスの作成]ボタンでインスタンスを作成します。
- 作成にはちょっと時間がかかります。
SSH接続します。
- インスタンス作成時に取得した鍵の権限を設定します。
- インスタンスの一覧から作成したインスタンスを選択して詳細画面を表示し、インスタンスのIPv4パブリックIPを確認します。
- MacのターミナルなどでSSH接続します。
# ssh接続する方法 : ssh -i {作成した秘密鍵のファイルパス} {ユーザ名:AMIの種類で変わる}@{インスタンスのIPv4パブリックIP} $ ssh -i .ssh/key.pem ubuntu@{インスタンスのIPv4パブリックIP} The authenticity of host '{インスタンスのIPv4パブリックIP} ({インスタンスのIPv4パブリックIP})' can't be established. ECDSA key fingerprint is SHA256:Zxxx Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '{インスタンスのIPv4パブリックIP}' (ECDSA) to the list of known hosts. Welcome to Ubuntu 18.04.3 LTS (GNU/Linux 4.15.0-1057-aws x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantage System information as of Tue Feb 25 11:15:51 UTC 2020 System load: 0.0 Processes: 87 Usage of /: 13.6% of 7.69GB Users logged in: 0 Memory usage: 14% IP address for eth0: 172.31.17.109 Swap usage: 0% 0 packages can be updated. 0 updates are security updates. The programs included with the Ubuntu system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. ubuntu@ip-1xx-xx-xx-1xx:~$
aptコマンドでmysqlコマンドをインストールしてみました。
作ったUbuntu Serverにリモートデスクトップ接続できるようにします。
Ubuntu Server側を設定します。
aptの更新とユーザー作成をします。
# 1. SSHでログインします。 # 2. aptのリポジトリ一覧を更新します(-y : 問い合わせがあった場合はすべて「y」と答える) $ sudo apt update -y Hit:1 http://us-east-2.ec2.archive.ubuntu.com/ubuntu bionic InRelease Hit:2 http://us-east-2.ec2.archive.ubuntu.com/ubuntu bionic-updates InRelease Hit:3 http://us-east-2.ec2.archive.ubuntu.com/ubuntu bionic-backports InRelease Get:4 http://security.ubuntu.com/ubuntu bionic-security InRelease [88.7 kB] #...省略... 32 packages can be upgraded. Run 'apt list --upgradable' to see them. # 3. インストール済みのパッケージを更新します。 $ sudo apt upgrade -y Reading package lists... Done Building dependency tree #...省略... Processing triggers for initramfs-tools (0.130ubuntu3.9) ... update-initramfs: Generating /boot/initrd.img-4.15.0-1060-aws # 4. リモートデスクトップ用にユーザーを作成します。 $ sudo adduser ponsuke Adding user `ponsuke' ... Adding new group `ponsuke' (1001) ... Adding new user `ponsuke' (1001) with group `ponsuke' ... Creating home directory `/home/ponsuke' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for ponsuke Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y # 5. 作ったユーザーをsudoグループに参加させます。 $ sudo gpasswd -a ponsuke sudo Adding user ponsuke to group sudo
デスクトップ環境をインストールします。
# 1. パッケージを検索します。 $ apt search ubuntu-desktop Sorting... Done Full Text Search... Done edubuntu-desktop/bionic 15.12.9 amd64 educational desktop for Ubuntu kubuntu-desktop/bionic 1.370 amd64 Kubuntu Plasma Desktop/Netbook system lubuntu-desktop/bionic-updates 0.94.1 amd64 Lubuntu Desktop environment qtubuntu-desktop/bionic 0.64+17.10.20170707-0ubuntu7 amd64 Qt plugins for Mir support on Ubuntu (desktop) ubuntu-desktop/bionic-updates 1.417.4 amd64 The Ubuntu desktop system xubuntu-desktop/bionic 2.225 amd64 Xubuntu desktop system # 2. ubuntu-desktopをインストールします。 $ sudo apt -y install ubuntu-desktop Reading package lists... Done Building dependency tree #...省略... Processing triggers for systemd (237-3ubuntu10.39) ... Processing triggers for ureadahead (0.100.0-21) ...
xrdpをインストールします。
xrdp とは
xrdp はオープンソースで開発されている Remote Desktop Protocol のサーバソフトウェアです。
フロントページ - 日本 xrdp ユーザ会
# 1. パッケージを検索します。 $ apt search xrdp Sorting... Done Full Text Search... Done xorgxrdp/bionic 0.9.5-2 amd64 Remote Desktop Protocol (RDP) modules for X.org xorgxrdp-hwe-18.04/bionic-updates 0.9.5-2~18.04.1 amd64 Remote Desktop Protocol (RDP) modules for X.org xrdp/bionic 0.9.5-2 amd64 Remote Desktop Protocol (RDP) server xrdp-pulseaudio-installer/bionic 0.9.5-2 amd64 Remote Desktop Protocol (RDP) server - PulseAudio module installer # 2. xrdpをインストールします。 $ sudo apt install -y xrdp Reading package lists... Done Building dependency tree #...省略... Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for ureadahead (0.100.0-21) ... # 3. バージョンを確認します。 $ xrdp -v xrdp: A Remote Desktop Protocol server. Copyright (C) Jay Sorg 2004-2014 See http://www.xrdp.org for more information. Version 0.9.5 # 4. new_cursorsを無効化します。 $ ls -la /etc/xrdp/ | grep xrdp -rw------- 1 xrdp root 2939 Mar 4 11:41 rsakeys.ini -rw-r--r-- 1 root root 4916 Feb 16 2018 xrdp.ini -rw-r--r-- 1 root root 3361 Feb 16 2018 xrdp_keyboard.ini $ sudo sed -e 's/^new_cursors=true/new_cursors=false/g' -i /etc/xrdp/xrdp.ini # 5. xrdpサービスを再起動します。 $ sudo systemctl restart xrdp # 6. xrdpサービスを有効化します。 $ sudo systemctl enable xrdp.service Synchronizing state of xrdp.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable xrdp $ sudo systemctl enable xrdp-sesman.service $ systemctl list-unit-files -t service | grep xrdp xrdp-sesman.service enabled xrdp.service enabled # 7. 作成したユーザーに切り替えます。 $ su ponsuke Password: To run a command as administrator (user "root"), use "sudo <command>". See "man sudo_root" for details. $ cd ~ $ pwd /home/ponsuke # 8. 環境変数を設定します。 $ DESKTOP=/usr/share/ubuntu:/usr/local/share:/usr/share:/var/lib/snapd/desktop # 9. .xsessionファイルを作成します。 $ cat <<EOF > ~/.xsessionrc > export GNOME_SHELL_SESSION_MODE=ubuntu > export XDG_CURRENT_DESKTOP=ubuntu:GNOME > export XDG_DATA_DIRS=${DESKTOP} > export XDG_CONFIG_DIRS=/etc/xdg/xdg-ubuntu:/etc/xdg > EOF
Authentication Requiredダイアログを回避できるようにします。
Polkit(旧名PolicyKit)とは、Unix系オペレーティングシステムで、システム全体の権限を制御するためのアプリケーション開発ツールキットである。このライブラリによって、特権を持たないプロセスが、特権を持つプロセスと通信することができるようになる。
Polkit - Wikipedia
# 1. 設定します。 $ cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/xrdp-color-manager.pkla > [Netowrkmanager] > Identity=unix-user:* > Action=org.freedesktop.color-manager.create-device > ResultAny=no > ResultInactive=no > ResultActive=yes > EOF [sudo] password for ponsuke: [Netowrkmanager] Identity=unix-user:* Action=org.freedesktop.color-manager.create-device ResultAny=no ResultInactive=no ResultActive=yes # 2. サービスを再起動します。 $ sudo systemctl restart polkit
セキュリティグループに設定を追加します。
Mac側を設定します。
リモートデスクトップアプリをインストールします。
- Apple StoreからMicrosoft Remote Desktop 10をインストールします。
Ubuntuへリモートデスクトップ接続します。
- Microsoft Remote Desktop 10を起動して[Add PC]ボタンで設定画面を開きます。
- 「インスタンスのIPv4パブリックIP」と「Ubuntuで作成したユーザー」を設定して[Add]ボタンで設定を追加します。
- 注意:今回はElasticIPアドレスを使用していないため、インスタンスを起動するたびにIPアドレスが変わります。なので、起動するたびにリモートデスクトップに設定するIPアドレスを変更する必要があります。
- 追加された設定をダブルクリックします。
- 初めての場合はダイアログが表示されるので[Connect]ボタンで進めます。
- Ubuntuに接続できました。
失敗したこと
Amazon Machine Image (AMI) で何を選択したかによってSSH接続する時のユーザ名が異なります。
ドキュメントの例では、
ですが初めて作ったインスタンスでは
でした。
これに気がつくのにかなり時間がかかりました。
xn--o9j8h1c9hb5756dt0ua226amc1a.com
インスタンスタイプが「t2.micro」では小さすぎた。
インスタンスタイプを「t2.micro」で作成しました。
SSH接続して作業するには問題なかったのですが、
デスクトップ環境をインストールしてリモートデスクトップ接続したところ
画面は表示されるものの全然動かない!
なので「t2.medium」に変更しました。
無料枠から外れてしまうのですが動かないよりはいいかと・・・。
サイドチャネル攻撃とテンペスト攻撃の違い
- 前回の勉強内容
- 勉強のきっかけになった問題
- サイドチャネル攻撃とテンペスト攻撃は、暗号装置を解析し暗号を盗む方法に使用されます。
- サイドチャネル攻撃は、動いている装置から出る電流や電磁波・振動を計測して暗号解析の手がかりを得る攻撃です。
- テンペスト攻撃は、サイドチャネル攻撃の種類の1つです。
- サイドチャネル攻撃には、他にも種類があります。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
テンペスト攻撃を説明したものはどれか。
- 故意に暗号化演算を誤動作させて正しい処理結果との差異を解析する。
- 処理時間の差異を計測して解析する。
- 処理中に機器から放射される電磁波を観測して解析する。
- チップ内の信号線などに探針を直接当て,処理中のデータを観測して解析する。
サイドチャネル攻撃とテンペスト攻撃は、暗号装置を解析し暗号を盗む方法に使用されます。
サイドチャネル攻撃は、動いている装置から出る電流や電磁波・振動を計測して暗号解析の手がかりを得る攻撃です。
- 英語 : Side Channel Attack
- 外部と隔離された機器でも攻撃される可能性があります。
テンペスト攻撃は、サイドチャネル攻撃の種類の1つです。
テンペスト攻撃は、機器やその周辺機器から出力される微弱な電磁波を計測して元情報を復元しようとします。
ディスプレイから発生される電磁波の放射レベルは強く、復号も容易になっています。
テンペスト技術とは?遠隔で不正に情報を傍受する技術への対策について
漏洩電磁波から画面表示を“再現”したパソコン・モニター
「10万円の受信機でパソコンからの漏洩電磁波を“盗聴”できる」――ISTがデモ | 日経 xTECH(クロステック)
サイドチャネル攻撃には、他にも種類があります。
電力解析攻撃は、機器の電力を計測します。
- 英語 : Simple Powering Analysis
- 別名 : SPA
故障利用攻撃は、故意に暗号化演算を誤動作させて正しい処理結果との差異を解析します。
- 別名 : フォールト解析攻撃
タイミング攻撃は、処理時間の差異を計測して解析します。
タイミング攻撃では、攻撃対象の処理の実装を分析して応答時間が変化する要因を見つけることで、入力とその応答時間から隠されたデータ(パスワードなど)の特定を試みます。
corgi-lab.com
プローブ解析は、チップ内の信号線などに探針を直接当て,処理中のデータを観測する破壊型解析です。
- 別名 : プロ―ビング
他にもCache攻撃、スキャンベース攻撃等色々あります。
次回の勉強内容
2進数の問題を見ると頭が混乱します。
前回の勉強内容
2進数の表現の問題
aを正の整数とし,b=aの2乗 とする。aを2進数で表現するとnビットであるとき,bを2進数で表現すると高々何ビットになるか。
- n+1
- 2n
- nの2乗
- 2のn乗
「高々」とは、「最大」のことです。
- 読み方 : たかだか
- bを2進数で表現すると高々何ビット = bを2進数で表現すると最大何ビット
数学において、高々(たかだか)という表現は、英語の at most に対応した厳密な意味を持つ用語である。
「xは高々2である」という表現は「xは多くとも2である」事、すなわち「x≦2」を意味する。
高々 (数学) - Wikipedia
超地道な解き方:「aを2進数で表現するとnビット」のnに値を入れて考えてみる。
- aが2bitだと、bの最大は1001で4bitになる
- aの最大 = (2進数)11 = (10進数)2 + 1 = (10進数)3
- bの最大 = aの2乗 = (10進数)9 = (10進数)8 + 0 + 0 + 1 = (2進数)1001 = 4bit
- aが3bitだと、bの最大は110001で6bitになる
- aの最大 = (2進数)111 = (10進数)4 + 2 + 1 = (10進数)7
- bの最大 = aの2乗 = (10進数)49 = (10進数)32 + 16 + 0 + 0 + 0 + 1 = (2進数)110001 = 6bit
- aが4bitだと、bの最大は11100001で8bitになる
- aの最大 = (2進数)1111 = (10進数)8 + 4 + 2 + 1 = (10進数)15
- bの最大 = aの2乗 = (10進数)225 = (10進数)128 + 64 + 32 + 0 + 0 + 0 + 0 + 1 = (2進数)11100001 = 8bit
- aが5bitだと、bの最大は1111000001で10bitになる
- aの最大 = (2進数)11111 = (10進数)16 + 8 + 4 + 2 + 1 = (10進数)31
- bの最大 = aの2乗 = (10進数)961 = (10進数)512 + 256 + 128 + 64 + 0 + 0 + 0 + 0 + 0 + 1 = (2進数)1111000001 = 10bit
なんかaを1bit増やすとbのbitが2bit(真ん中の10分)増える・・・だから「2n」ですね。
Webツールを使ってちょっと大きめの値で確認してみる
- aが20bitだと、bの最大は1111111111111111111000000000000000000001で40bit
- aの最大 = (2進数)1が20個並ぶ = (10進数)1048575
- bの最大 = aの2乗 = (10進数)1099509530625 = (2進数)1111111111111111111000000000000000000001 = 40bit
- 使ったWebツール
サイトで紹介されている解き方
nけたの正の整数aと、mけたの正の整数bを乗算(a×b)したときのけた数はそれぞれの数字のけた数の和(n+m)を超えることはありません。
この性質は10進数に限ったことではなく、2進数、16進数などでも同じです。また、2進数では必ずけた数の和になります。
問題では2進数nビット(けた)の正の整数aを二乗したときのけた数ですから、
(n+n)=2n
平成25年 春期 応用情報技術者 午前 問1
2進数でnビットの最大値は、1111...112ですね(1がn個)。
これを式変形します。
1111...112(※1がn個) = 1000...002(※(n+1)桁。1の後ろに0がn個) - 12
これを、10進数に直すと、
2n - 1
となります。
※注:簡単に導出しているように見えますが、実際には簡単な例(n=2のときとか)で確認しています。そうしたら、2乗しましょう。
(2n - 1)2
= 22n - 2 * 2n + 1これを2進数に直すと、
= 1000...0002(※(2n+1)桁。1の後ろに0が2n個)
- 100..002(※(n+1)桁。1の後ろに0がn個)
+ 12
となります。
計算後は、(2n+1)桁よりも小さな値になりますから、2n桁になります。
応用情報H25春 問1の解説 - だるまのエクセルVBA
ビット演算の応用問題
0以上255以下の整数nに対して、と定義する。next(n)と恒等的に等しい式はどれか。ここで,x AND y 及び x OR y は,それぞれxとyを2進数表現にして,けたごとの論理積及び論理和をとったものとする。
- (n+1) AND 255
- (n+1) AND 256
- (n+1) OR 255
- (n+1) OR 256
「恒等的に等しい」とは「どのような場合でも等しい」ということらしい
超地道な解き方:2進数にして論理演算してみます。
- nの最大値である255は2進数で書くと1111111となり、nは7bitで書ける範囲ということになります。
- n < 255の場合は、next(n) = n + 1 になります。
- n = 255の場合は、next(255) = 0になります。
- 以下表のようになる論理演算を選ぶわけです。
(10進数)n | (10進数)next(n) | (2進数)n | (2進数)next(n) |
---|---|---|---|
255 | 0 | 1111111 | 0000000 |
254 | 255 | 1111110 | 1111111 |
2 | 3 | 0000010 | 0000011 |
1 | 2 | 0000001 | 0000010 |
0 | 1 | 0000000 | 0000001 |
- 回答群から推理して (n + 1) と (255 か 256) の組み合わせの論理演算になるはずです。
- 論理演算下後に (n + 1) になるはずです。
- nを7として8bitの2進数表記(256を表すため)で試してみます。
(n+1) AND 255
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
255 | 011111111 |
AND | 0000100 |
(n+1) AND 256
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
256 | 10000000 |
AND | 0000000 |
(n+1) OR 255
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
255 | 011111111 |
OR | 011111111 |
(n+1) OR 256
10進数 | 2進数 |
---|---|
n+1=8 | 0000100 |
256 | 10000000 |
OR | 1000100 |
- 答えは「 ( n + 1) AND 255 」です。
サイトで紹介されている解き方
定義式をみると、0なら1、1なら2と1ずつ足していって255だったら0にもどるという。いわゆる256進カウンタであることがわかります。これを2進数で考えます。255とは11111111です。ここで1を加えると0になるので100000000が0になる処理を考えると選択肢アが正解だとわかります。
平成18年度春期・ソフ開過去問・解説
ア 『(n +1)AND 255』は、255を2進数で表すと“1111 1111”なので、n =0のとき、next(n )=1になり、n =255のとき、next(n )=0になり、定義と一致する。
イ 『(n +1)AND 256』は、256を2進数で表すと“1 0000 0000”なので、n =0のとき、next(n )=0になり、定義と一致しない。
ウ 『(n +1)OR 255』は、255を2進数で表すと“1111 1111”なので、n =0のとき、next(n )=255になり、定義と一致しない。
エ 『(n +1)OR 256』は、256を2進数で表すと“1 0000 0000”なので、n =0のとき、next(n )=257になり、定義と一致しない。
平成18年 春期 ソフトウェア開発技術者 午前 問3
n が 255 の場合・・・
↓
255+1=256
↓
256と255は2進で
0001 0000 0000
0000 1111 1111
↓
これらの AND は
0000 0000 0000
で、ゼロになります。255未満で、例えば n が 254 については・・・
↓
254+1=255
↓
255と255は2進で
0000 1111 1111
0000 1111 1111
↓
これらの AND は
0000 1111 1111
で、255 。n+1 になりました。
恒等式 - 合格☆情報処理技術者試験
次回の勉強内容
勉強中・・・
OP25BをしているプロバイダにはサブミッションポートかSMTPSかSTARTTLSを使おう
前回の勉強内容
メールを送信する時にSMPTというプロトコルを使います。
SMTPとは、電子メールを伝送するための通信手順の一つです。
残念ながら、セキュリティにはいろいろ問題がありました。
そのために「POP before SMTP」「SMTP-AUTH」「OP25B」などの対策が行われています。
POP before SMTPとSMTP-AUTHは、ユーザー認証をしてからメールを送信する仕組みです。
OP25Bは、ネットワーク内から外部のコンピュータのTCPポート25番への通信を禁止します。
外部からメールを送信する場合にOP25BをしているプロバイダではTCPポート25番が使えません。
サブミッションポートは、メール送信専用に利用するTCPポート587番のことです。
- 英語 : submission port
OP25Bを実施しているプロバイダの場合はTCP25番ポートを通してのメール送信が出来なくなるけれど、このサブミッションポートを利用することで送信が可能となります。
サブミッションポートは、SMTP認証(SMTP-AUTH)と合わせて利用します。
TCPのサブミッションポート(ポート番号587)の説明として,適切なものはどれか。
SMTPSでは、TCPポート465番を使います。
SMTPSは、伝送路を暗号化するSSL/TLSをSMTPに組み合わせたプロトコルです。
通常のSMTPとは異なる専用のポート番号(465番)を用いて最初からSSL/TLSにより通信を開始する方式。
トランスポート層において、データ完全性、機密性と通信相手を認証する機能を提供する。
アプリケーション層でクライアントとサーバは通常のSMTPを利用するが、コネクション自体はSSLもしくはTLSによって保護される。この動作はコネクションの確立時に行われる。クライアントやサーバがコネクションを確立する際、SSLやTLSを利用するかどうかは分からないため、SMTPSのためのポート番号を割り当てることが一般的である。
SMTPS - Wikipedia
次回の勉強内容
いろんな攻撃手法を薄く広く知る
- 前回の勉強内容
- 今回の勉強内容 : いろんな攻撃手法を薄く広く知る
- Dos攻撃とDDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。
- ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。
- トロイの木馬とは、便利なソフトウェアに見せかけてユーザに被害を与える不正なプログラムです。
- サラミ法は、発覚しない程度に少量ずつの金銭や物品を窃取します。
- スキャベンジングは、日本語でゴミを漁るです。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : いろんな攻撃手法を薄く広く知る
勉強のきっかけになった問題
データの破壊,改ざんなどの不正な機能をプログラムの一部に組み込んだものを送ってインストールさせ,実行させるものはどれか。
ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。
辞書攻撃は、パスワードによく使われる文字を片っ端から入力して不正ログインを試みます。
- 別名 : 辞書アタック、ディクショナリーアタック
もちろん手動では腱鞘炎になるのでツールを使ってガッツリ攻撃してきます。
ブルートフォース攻撃より「パスワードによく使われる文字」に絞るので効率は良いです。
トロイの木馬とは、便利なソフトウェアに見せかけてユーザに被害を与える不正なプログラムです。
- 英語 : Trojan Horse
便利なツールいろいろあるなぁ・・・って、よく確認しないと「トロイの木馬」に引っかかるです!
有用なソフトウェアに見せかけて配布された後,システムの破壊や個人情報の詐取など悪意ある動作をする。
平成24年春期問54 トロイの木馬の特徴|ITパスポート試験ドットコム
例えば・・・パソコン内部の秘密のファイルをインターネット上に送信したり、ファイルやディスク内容を破壊したりします。
感染機能は持っていませんので、感染増殖することはありません。が、そのためにワクチンソフトの検出対象外となります。
感染増殖はしないので、ワクチンソフトでは、基本的にトロイの木馬を検出の対象外としています。信頼できないサイトに便利なツールソフトウェアとして掲載されていても、そのプログラムはむやみにダウンロードして実行しないようにしましょう。
ウイルス用語辞典:IPA 独立行政法人 情報処理推進機構
サラミ法は、発覚しない程度に少量ずつの金銭や物品を窃取します。
不正行為が表面化しない程度に,多数の資産から少しずつ詐取する方法である。
平成25年秋期問43 サラミ法はどれか|基本情報技術者試験.com
銀行預金の利息を着服する
預金の利息計算時には必ず1円未満の端数が生じる。この端数は微々たるものであるが、全ての口座から端数を集めれば大金になる。
実際に1960年代後半、アメリカ・ニューヨークの銀行で、プログラムに細工をして1セント未満の端数処理を四捨五入からすべて切り捨てに変更し、切り捨てられた端数を自分の口座に振り込ませるように改鼠する事件があった。他人の口座から毎月1万円程度を不正に引き出す
スキミングなどの不正な手段によって他人のキャッシュカードのコピーを手にした人間が、1ヶ月あたり1万円 - 2万円以下の額を不正に引き出していた。
架空の電子商店をでっちあげてクレジットカード番号を大量に集め、大勢の人から少額ずつ詐取した事例がある。不正に引き落とされた金額は一人あたりではごく少額だったため、ほとんどの人はカードが不正に使われたことに気が付かなかった。
サラミ法 - Wikipedia
スキャベンジングは、日本語でゴミを漁るです。
- 英語 : scavenging(scavenge : ゴミを漁る)
- 別名 : ゴミあさり、トラッシング、ダンプスターダイビング
プログラム実行後のコンピュータ内部又はその周囲に残っている情報をひそかに探索して,必要情報を入手する方法である。
平成25年秋期問43 サラミ法はどれか|基本情報技術者試験.com
ソーシャルエンジニアリングの1つでもあります。
次回の勉強内容
状態遷移から知る有限オートマトン
- 前回の勉強内容
- 今回の勉強内容 : 状態遷移図を使って有限オートマトンを知る
- 無効と有効の状態遷移をテストする状態遷移テストというものがあります。
- オートマトンは、入力から内部の状態と規則に従い結果を出力する仮想的な自動機械です。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : 状態遷移図を使って有限オートマトンを知る
勉強のきっかけになった問題
次の表は,入力記号の集合が{0,1},状態集合が{a,b,c,d}である有限オートマトンの状態遷移表である。長さ3以上の任意のビット列を左(上位ビット)から順に読み込んで最後が110で終わっているものを受理するには,どの状態を受理状態とすればよいか。
1. a 2. b 3. c 4. d
平成18年秋期問7 有限オートマトンの状態遷移表|応用情報技術者試験.com
無効と有効の状態遷移をテストする状態遷移テストというものがあります。
- 英語 : state transition testing
ブラックボックステストの設計技法の一つ。無効と有効の状態遷移を実行するテストケースを設計する。
JSTQBソフトウェアテスト標準用語集
状態遷移をテストするには状態の遷移を整理するために図と表を使用します。
状態遷移図は、発生する可能性のあるイベントとその結果の状態を図にしたものです。
- 英語 : state diagram
- 特徴
- 「できること」を表現する
- 状態遷移の流れを容易に把握できる
- 図示することによって新たな発見がある
- どこへの遷移もしない状態 / 複数の異なる状態に遷移するイベント
- 状態遷移に関する仕様の不備にだって気がつく
コンポーネント又はシステムが取りうる状態を示し、ある状態から他への状態の変化の原因となる、(又は)その結果として生ずる、イベントや状況を表すダイアグラム。
JSTQBソフトウェアテスト標準用語集
A diagram that depicts the states that a system or component can assume, and shows the events or circumstances that cause or result from a change from one state to another.
IEEE 610Standard Glossary of Software Engineering Terminology
図はマルチタスクで動作するコンピュータにおけるタスクの状態遷移を表したものである。実行状態のタスクが実行可能状態に遷移するのはどの場合か。
- 自分より優先度の高いタスクが実行可能状態になった。
- タスクが生成された。
- 入出力要求による処理が完了した。
- 入出力要求を行った。
平成23年秋期問20 タスクの状態遷移|基本情報技術者試験.com
状態遷移表は、発生する可能性のあるイベントと状態の組み合わせから生じる結果を示す遷移をテーブルで表したものです。
- 英語 : state table
- 無効な遷移と、有効な遷移の両方を示します。
- 特徴
- 「できないこと」を洗い出せる
- 仕様があいまいな個所に潜む欠陥を発見できる
- 全ての状態と全てのイベントを組み合わせるので、仕様のあいまいな個所を特定できる
- 状態遷移図の不備を見つけることができる
次の表は,文字列を検査するための状態遷移表である。検査では,初期状態をaとし,文字列の検査中に状態がeになれば不合格とする。
解答群で示される文字列のうち,不合格となるものはどれか。ここで,文字列は左端から検査し,解答群中の△は空白を表す。
ア. +0010 イ. -1 ウ. 12.2 エ. 9.△
平成18年春期問9 状態遷移表|基本情報技術者試験.com
図は,偶数個の1を含むビット列を受理するオートマトンの状態遷移図であり,二重丸が受理状態を表す。a,bの正しい組合せはどれか。
回答群
平成25年春期問3 オートマトンの状態遷移図|応用情報技術者試験.com
状態遷移図と状態遷移表は、各メリットを合わせてお互いを見合わせながら整理することでテストケースを洗い出す事ができます。
状態遷移図では動作を想定しながら作るので「できること」に着目しがちですが、状態遷移表は状態とイベントを網羅的に組み合わせるので「できないこと」にも気が付けるのです。
性格が違うのだからどちらかあればいいってわけではないのですね。
オートマトンは、入力から内部の状態と規則に従い結果を出力する仮想的な自動機械です。
- 英語 : automaton
入力と状態の数がある程度決まっているのが有限オートマトンです。
- 別名 : 有限状態機械
有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」である。
デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。有限個の「状態」のうち1つの状態をとる。ある時点では1つの状態しかとらず、それをその時点の「現在状態」と呼ぶ。
何らかのイベントや条件によってある状態から別の状態へと移行し、それを「遷移」と呼ぶ。それぞれの現在状態から遷移しうる状態と、遷移のきっかけとなる条件を列挙することで定義される。
有限オートマトン - Wikipedia
図で表される有限オートマトンで受理される文字列はどれか。ここでは初期状態を,受理状態を表す。
ア 01011 イ 01111 ウ 10111 エ 11110
平成18年秋期問11 有限オートマトン|基本情報技術者試験.com
勉強のきっかけになった問題も状態遷移図を書いてみるとわかりやすいです。
次回の勉強内容
ページング方式におけるページインだけの処理の割合
- 前回の勉強内容
- 今回の勉強内容 : ページング方式の基本用語を理解したい。
- ページング方式とは、メモリ領域をページと呼ばれる一定の大きさの領域に分割し、物理的なアドレスとは別に仮想的なアドレスを割り当てて管理する方式です。
- アクセスしようとした領域が物理メモリではなく仮想メモリにある場合に発生する割り込み処理をページフォールトといいます。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : ページング方式の基本用語を理解したい。
ページング方式とは、メモリ領域をページと呼ばれる一定の大きさの領域に分割し、物理的なアドレスとは別に仮想的なアドレスを割り当てて管理する方式です。
物理メモリが不足した時にOSさんは、ハードディスクの一部をメモリっぽく使用してくれます。
それが仮想メモリです。仮想メモリはハードディスクにスワップファイルという専用領域を造ります。
$ cd /var/vm/ #<<< Mac OSはここにスワップファイルを作ります。 $ ls -l total 8388608 -rw------T 1 root wheel 1073741824 3 31 22:05 sleepimage -rw------- 1 root wheel 1073741824 2 20 00:06 swapfile0 # <<< スワップファイル -rw------- 1 root wheel 1073741824 3 10 21:57 swapfile2 -rw------- 1 root wheel 1073741824 3 31 21:48 swapfile3
ページング方式の仮想記憶を使うとプログラムやデータを不連続な主記憶に割り付けることができます。
細切れのメモリ空間を連結して一つの連続した空間として利用したり、補助記憶装置(ハードディスクなど)上にも仮想的なメモリ領域を確保することで、物理メモリの容量を超えてメモリ空間を利用することができます。
アクセスしようとした領域が物理メモリではなく仮想メモリにある場合に発生する割り込み処理をページフォールトといいます。
- 英語 : page fault
ページング方式の仮想メモリにおいて、プロセスがアクセスしようとしたページが物理メモリ上に無く、仮想メモリにあるときに仮想メモリを管理する制御装置が発する例外あるいは割込処理をページフォールトといいます。
このページフォルトは、エラーっぽい名前だけれどとかでとか来た時に表示される通知やお知らせ的な存在です。
そのページフォルトをOSさんが検知して物理メモリに必要なページを読み込んでくれます。
リストラ的にページフレームを追い出すことをページアウトといいます。
- 別名 : スワップアウト
ページング方式では「プロセスが使ってる部分は物理メモリ、使ってない部分は仮想メモリを使う」「仮想メモリはページというカタマリで使われていく」、そして「使ってなかった部分を使うときは仮想メモリから物理メモリを使うようにする」ことがわかりました。
が、物理メモリが空いていればいいけど、空いていなかったらどうするんだろう?
物理メモリが空いていなかったら、どれかのページを追い出すんです!
どのページフレームを追い出すかってのはアルゴリズムによって違います。
逆にデビュー的にページをページフレームに読み込むことをページインとかスワップインといいます。
次回の勉強内容
SQLインジェクション
- 前回の勉強内容
- 今回の勉強内容 : SQLインジェクションの対策を学ぶ
- SQLインジェクションとは、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のことです。
- 入力値で仕込んでデータが再利用されたときに効力を発揮するセカンドオーダーSQLインジェクション
- シングルクオーテーションを使わないSQLインジェクション
- マルチバイト文字の問題
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : SQLインジェクションの対策を学ぶ
勉強のきっかけになった問題
SQLインジェクション対策について,Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策として,ともに適切なものはどれか。
情報セキュリティスペシャリスト 平成28年秋期 午前Ⅱ 問17
SQLインジェクションとは、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のことです。
【2】SQLインジェクションによる顧客情報流出 ― 不正アクセスの横綱!| Webサイトセキュリティ対策入門 by WAF「Scutum」プロジェクト
対策 : SQLを埋め込むところで特殊文字を適切にエスケープ
' → ''
\ → \\
今夜分かるSQLインジェクション対策:Security&Trust ウォッチ(42) - @IT
入力値で仕込んでデータが再利用されたときに効力を発揮するセカンドオーダーSQLインジェクション
たとえアプリケーションが常にシングルクオートをエスケープしていても、 攻撃者はなおも、データベース中のデータがそのアプリケーションで再利用さ れるときにSQLをインジェクトすることができます。
- 例えば・・・
- 攻撃者がアプリケーションに登録して、ユーザ名「admin'--」、 パスワード「password」のユーザ名を作る
- アプリケーションはシングルクオートを正しくエスケープして、INSERT文が作られる
- insert into users values ( 123, 'admin''--', 'password', 0xffff)
- 攻撃者がパスワードを変更する
- update users set password = '" + newpassword + "’ where username = '" + rso ( "admin'--") + "'"
- 最初にせっかくエスケープしたのに次には・・・・されず・・・クエリが生成される
- update users set password = 'password' where username = 'admin'--'
- 攻撃者は、admin'-- というユーザを登録することによって、admin のパスワードを自由にセットできる
対策 : データベースでのアクセス権は最小限に留める
不正なSQLがWebアプリから送られても最小限のアクセス権だけを与えることで被害を軽減できます。
シングルクオーテーションを使わないSQLインジェクション
SQLインジェクション対策というと、「'」の扱いばかりが注目されるが、「'」を使わなくても成立する攻撃もあります。
- 例えば・・・
- SELECT name FROM user where uid = '$uid' AND age > $age
- 渡される$uidと$ageの特殊文字は、適切にエスケープ!が、こんなものがきたら・・・
- $uid:ueno
- $age:31 UNION…
- SELECT name FROM user where uid = ' ueno ' AND age > 31 UNION……
- UNION以降のSQLも実行されてしまう・・・
- 対策 : 問題は、ageの値をシングルクオーテーションで囲う
- SELECT name FROM user where uid = '$uid' AND age > '$age'
対策 : SQLのプレースホルダを利用する
プレースホルダとは、ユーザ入力をもとに生成される部分に特殊文字を使用したSQL文中のひな形を用意し、その変数部分には実行時に値を割り当てる仕組みです。
PHPの場合 : $1と$2がプレースホルダ
PHPでのSQLインジェクション対策 - プレースホルダ編 | Let's Postgres$res = pg_query_params( $dbconn, 'UPDATE users SET profile = $1 WHERE userid = $2', array($_REQUEST['profile'], $_SESSION['me']['userid']) );
Javaの場合 : ?がプレースホルダ
安全なSQLの呼び出し方 - QiitaPreparedStatement prep = conn.prepareStatement("SELECT * FROM employee WHERE name=?"); prep.setString(1, "山田");
マルチバイト文字の問題
- 例えば・・・入力値「\x97' OR A=A」をエスケープ処理すると「予' OR A=A」になる
次回の勉強内容
パイブライン処理での危険がパイブラインハザード
- 前回の勉強内容
- 今回の勉強内容 : パイブライン処理での危険を学ぶ
- パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。
- ハザードの種類は、原因によって分けられます。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : パイブライン処理での危険を学ぶ
勉強のきっかけになった問題
パイプライン方式のプロセッサにおいて,パイプラインが分岐先の命令を取得するときに起こるハザードはどれか。
- 構造ハザード
- 資源ハザード
- 制御ハザード > 正解
- データハザード
パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。
- 英語 : pipeline hazard
マイクロプロセッサ(MPU/CPU)のパイプライン処理で発生する問題の一つです。
ハザードの種類は、原因によって分けられます。
制御ハザードは、分岐命令によって先取りした命令が無駄になることです。
- 別名 : 分岐ハザード
- 例えば・・・
- 条件分岐で実行の流れが二つに分かれる場合、条件の評価を待たずに先行して片方の分岐の命令群をパイプラインに投入することになるが、条件を評価した結果もう一方に分岐することが確定した場合、パイプラインの内容を破棄して正しい分岐の命令群を投入しなおさなければならない。
- 分岐命令を実行した場合、次に実行される命令は、分岐が成立した場合と不成立の場合の2通りがある。分岐が成立しないと仮定して命令を先取りすると、分岐が成立した場合に先取りした命令をキャンセルし、改めて分岐が成立した場合の命令を実行しなければならない。
制御ハザードによって先取りした命令のキャンセルが発生し、ムダになったクロック*1のことをインターロック*2もしくはストール*3という。
解決方法
- 分岐先が判明するまで先取りしない
- 常に分岐が不成立(あるいは成立)と仮定して先取りを進める
- 場合によってはストールが起こることを容認する。
データハザードは、命令が直前の命令の実行結果を使用する場合に発生します。
ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状況が発生します。
解決方法
- NOP命令を挿入する
- コンパイラによってソフトウェア的に実現される
- データハザードを検知したら実行結果を次の命令に直接たわしてしまう
- 演算装置によってハードウェア的に実現される
構造ハザードは、CPU内部の資源の衝突によって発生します。
複数の命令をパイプラインで並行に処理する過程で、同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生し、処理がつっかえることがあります。
- 例えば・・・
- 命令Aがメモリへの書込を行っているのと同じタイミングで後続の命令Bがメモリの読込をしようとするとメモリアクセスがバッティングします。バッティングしないようにするために命令Bは1クロック処理を遅らせる必要があります。これにより1クロック分遅延します。
解決方法
- ハードウェア的に回避することは可能。
- しかし完全に構造ハザードを起こさない構成はコストの上昇を招く。
- 構造ハザードの確率が低ければ、コスト上昇を抑えるために、多少の構造ハザードを無視するのが現実的である。
次回の勉強内容
勉強中・・・
*1:CPUの動作基準となる時間の単位で、このクロックの整数倍の時間をかけて命令を実行していきます。命令パイプライン中の1ステージの実行には最低1クロックかかるので、4ステージ構成の命令パイプラインでは、1個の命令を実行完了するためには、最低でも4クロックの時間が必要となります。CPUをはじめとしたコンピュータの各回路は、一定の時間で刻まれるクロック信号に歩調を合わせながら処理を行っています。 このクロック信号は、非常に正確な時間間隔でパルス(非常に短い時間の間だけ変化する電流)を発生する水晶発振器によって生成されます。
*2:安全装置・安全機構の考え方の一つで、ある一定の条件が整わないと他の動作ができなくなるような機構のこと。
*3:命令パイプラインでは、除算命令のように命令の処理完了に長い時間がかかる場合、パイプラインに次の命令を取り込むのを待つ必要がある。この問題の解決策としてパイプラインの各段階が忙しいことを示せるようにして、パイプラインをインターロックして次の命令がステップを進まないように止めなければならない。これがストールであり、分岐のように中断以前の処理が無駄になる場合にはストールに加えて無駄となった処理時間分も加わり、これらがインターロックのロスとなる。
パイプライン処理の基本を学ぶ
- 前回の勉強内容
- 今回の勉強内容 : パイプライン処理の基本を学ぶ
- パイプライン処理とは、マイクロプロセッサの高速化手法の一つです。
- スーパースカラは、複数のパイプラインで並列に命令を処理できるようにする機構です。
- スーパーパイプラインは、パイプラインの段階を細分化して多くすることで並走できる命令数を増やします。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : パイプライン処理の基本を学ぶ
パイプライン処理とは、マイクロプロセッサの高速化手法の一つです。
プロセッサ内での命令処理は、複数の段階を順次行います。
- 処理の段階
- 命令の読み込み(フェッチ)
- 解釈(デコード)
- 実行(エグゼキュート)
- 結果の書き込み(ライトバック)
通常は、前の命令のサイクルが完全に終わらないと、次の命令を処理し始めることはできません。
パイプライン処理は、各段階の処理を独立して動作させることで、前の命令のサイクルが終わる前に次の命令を処理し始められます。
パイプライン処理には種類があります。
レンダリング処理の高速化に特化しているのが、グラフィックスパイプラインです。
- 英語 : Graphics pipeline
- 別名 : レンダリングパイプライン
3次元コンピュータグラフィックスで、3次元から2次元のデータを作る多段階の過程全体をパイプライン処理によって高速化しています。
スーパースカラは、複数のパイプラインで並列に命令を処理できるようにする機構です。
並列実行可能な複数の命令を,複数の演算器(パイプライン)に振り分けることによって並列に実行する。
平成31年春期問8 スーパスカラの説明はどれか|応用情報技術者試験.com
スーパーパイプラインは、パイプラインの段階を細分化して多くすることで並走できる命令数を増やします。
http://semirara.sota1235.net/general/%E3%82%B9%E3%83%BC%E3%83%91%E3%83%BC%E3%82%B9%E3%82%AB%E3%83%A9
次回の勉強内容
Dos攻撃とDDos攻撃はサーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。
- 前回の勉強内容
- 勉強のきっかけになった問題
- Dos攻撃とDDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。
- 攻撃には、「フラッド型」「脆弱性型」「マルチベクトル型」があります。
- OSI参照モデルのネットワーク層、トランスポート層が攻撃に使われやすいです。
- 次回の勉強内容
前回の勉強内容
勉強のきっかけになった問題
マルチベクトル型DDoS攻撃に該当するものはどれか。
- 攻撃対象のWebサーバ1台に対して,多数のPCから一斉にリクエストを送ってサーバのリソースを枯渇させる攻撃と,大量のDNS通信によってネットワークの帯域を消費させる攻撃を同時に行う。
- 攻撃対象のWebサイトのログインパスワードを解読するために,ブルートフォースによるログイン試行を,多数のスマートフォンやIoT機器などの踏み台から成るボットネットから一斉に行う。
- 攻撃対象のサーバに大量のレスポンスが同時に送り付けられるようにするために,多数のオープンリゾルバに対して,送信元IPアドレスを攻撃対象のサーバのIPアドレスに偽装した名前解決のリクエストを一斉に送信する。
- 攻撃対象の組織内の多数の端末をマルウェアに感染させ,当該マルウェアを遠隔操作することによってデータの改ざんやファイルの消去を一斉に行う。
Dos攻撃とDDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。
1つのIPアドレスから攻撃を仕掛けるのが、Dos攻撃です。
- 英語 : Denial(否定・拒絶) of Service attack
- 日本語 : サービス拒否攻撃
F5アタックは、一人でF5ボタンを押下し続ける寂しい攻撃です。
- 別名 : F5攻撃、F5連打攻撃
ブラウザでF5を押すと、画面をリロードしてくれます。しかもキャッシュ保存せずに。
なので、画面のデータを全部サーバへ要求します。
そしてF5を猛烈に連打するとサーバに負荷をかけることができます。
複数のIPアドレスから攻撃を仕掛けるのが、DDos攻撃です。
- 英語 : Distributed(分散型の) Denial of Service attack
- 日本語 : 分散型サービス拒否攻撃
DDos攻撃では、ボットネットが使われます。
外部からの遠隔操作に従って処理を実行するプログラムがボットです。それがたくさん集まったのがボットネットです。
残念ながら、自分のパソコンやスマホにボットが入ってしまうとDDos攻撃の加害者となります。
Miraiは、ランダムなIPアドレスを生成してtelnetポートにログインを試行し工場出荷時の弱いパスワードを使っているIoT機器などに感染を広げるとともにC&Cサーバからの指令に従って標的に対してDDoS攻撃を行うマルウェアです。
- 読み方: ミライ
IoTデバイスを狙うマルウェア「Mirai」とは何か――その正体と対策:超速解説 Mirai - TechFactory
感染した端末上でIPアドレスをランダムに走査し、新たな標的を見つけます。そして、工場出荷時のデフォルト値や単純なID/パスワードの組みによる辞書攻撃によって、標的IoT端末のtelnetポートへのログインを試みます。この動作を繰り返して、ボットネットを拡大していきます。Miraiが構築したボットネットは、過去最大級の規模のDDoS攻撃を引き起こしています。
情報処理安全確保支援士平成30年秋期 午前Ⅱ 問11
攻撃には、「フラッド型」「脆弱性型」「マルチベクトル型」があります。
フラッド型は、大量データを送りつけて処理しきれなくなるようにします。
サービス妨害攻撃 --- DoS,DDoS,smarf,SYNフラッド,DNS amp | 日経クロステック(xTECH)
OSI参照モデルのネットワーク層、トランスポート層が攻撃に使われやすいです。
第7層 | アプリケーション層 |
---|---|
第6層 | プレゼンテーション層 |
第5層 | セッション層 |
第4層 | トランスポート層 <- 反射型DDoS攻撃 / DNSリフレクタ攻撃 |
第3層 | ネットワーク層 <- ICMP Flood攻撃 |
第2層 | データリンク層 |
第1層 | 物理層 |
反射型DDoS攻撃は、トランスポート層でDNSサーバやNTPサーバを反射に使ってパケットを増幅させる攻撃です。
- 別名 : リフレクション攻撃、DrDoS攻撃(Distributed Reflection Denial of Service attack)
ICMP Flood攻撃は、ネットワーク層のICMPを利用して回線を過負荷にさせる攻撃です。
ICMP Flood攻撃に該当するものはどれか。
答. pingコマンドを用いて大量の要求パケットを発信することによって,攻撃対象のサーバに至るまでの回線を過負荷にしてアクセスを妨害する。
情報セキュリティスペシャリスト平成27年秋期 午前Ⅱ 問10