はじめて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
次回の勉強内容
Laravelのプロジェクトを作ってみる。
Laravelをインストーラを使わないでインストールします。
Composer Create-Projectでインストールします。
$ composer create-project --prefer-dist laravel/laravel {プロジェクトの名前}
コマンドの説明です。
利用可能なリポジトリにある既存のパッケージを複製して自身のパッケージにしたい(パッケージをフォークしたい)
$ composer create-project [vendor]/[package]
prefer-distオプション
GitHubなどでリポジトリを配信している場合、git cloneでソースを落としてくる(prefer-source)か、zipでダウンロードする(prefer-dist)か選ぶことができます。
通常、prefer-distでダウンロードしたほうが高速です。ただ、アクセストークンなどの認証情報をセットしておく必要があるので、設定できてない人はうまく動かないかもしれません。
そのためか、composerはprivateリポジトリの場合、デフォルトでgit cloneしようとします。
この挙動を変更してzipダウンロードを強制するのが --prefer-dist オプションで、 composer install --prefer-dist などのように使います。
blog.tojiru.net
$ composer create-project --prefer-dist laravel/laravel tryPhp Installing laravel/laravel (v5.7.19) - Installing laravel/laravel (v5.7.19): Loading from cache Created project in tryPhp > @php -r "file_exists('.env') || copy('.env.example', '.env');" Loading composer repositories with package information Updating dependencies (including require-dev) Package operations: 86 installs, 0 updates, 0 removals - Installing symfony/polyfill-ctype (v1.10.0): Loading from cache - Installing vlucas/phpdotenv (v2.6.1): Loading from cache - Installing symfony/css-selector (v4.2.3): Loading from cache # 省略 laravel/framework suggests installing pusher/pusher-php-server (Required to use the Pusher broadcast driver (^3.0).) laravel/framework suggests installing symfony/dom-crawler (Required to use most of the crawler integration testing tools (^4.1).) laravel/framework suggests installing symfony/psr-http-message-bridge (Required to psr7 bridging features (^1.0).) lcobucci/jwt suggests installing mdanter/ecc (Required to use Elliptic Curves based algorithms.) psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.) psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.) filp/whoops suggests installing whoops/soap (Formats errors as SOAP responses) sebastian/global-state suggests installing ext-uopz (*) phpunit/php-code-coverage suggests installing ext-xdebug (^2.6.0) phpunit/phpunit suggests installing phpunit/php-invoker (^2.0) phpunit/phpunit suggests installing ext-xdebug (*) Writing lock file 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. > @php artisan key:generate --ansi Application key set successfully. # バージョン確認します. $ php artisan -V Laravel Framework 5.7.26 # 作成されたLaravelプロジェクトのディレクトリ構成を見てみます. $ find tryPhp/ -type d tryPhp/ tryPhp//database # データベースのマイグレーションとモデルファクトリ、初期値設定(シーディング)が格納される tryPhp//database/migrations tryPhp//database/seeds tryPhp//database/factories tryPhp//bootstrap # フレームワークの初期処理を行うapp.phpファイルが格納される tryPhp//bootstrap/cache # 初期処理のパフォーマンスを最適化するため、フレームワークが生成するルートやサービスのキャッシュファイルが保存される tryPhp//app # アプリケーションのコアコードを格納するディレクトリ tryPhp//app/Providers tryPhp//app/Exceptions tryPhp//app/Http # コントローラ、ミドルウェア、フォームリクエストを設置します。アプリケーションへのリクエストを処理するロジックは、ほぼ全てこのディレクトリ内に設置します。 tryPhp//app/Http/Middleware tryPhp//app/Http/Controllers tryPhp//app/Http/Controllers/Auth tryPhp//app/Console # アプリケーションの全カスタムArtisanコマンドで構成します。これらのコマンドクラスはmake:commandコマンドにより生成されます。 tryPhp//config # アプリケーションの全設定ファイルが格納される tryPhp//resources # ビューやアセットの元ファイル(LESS、SASS、JavaScript)で構成され、すべての言語ファイルも格納される tryPhp//resources/js tryPhp//resources/js/components tryPhp//resources/lang tryPhp//resources/lang/en tryPhp//resources/sass tryPhp//resources/views tryPhp//tests tryPhp//tests/Unit tryPhp//tests/Feature tryPhp//storage # コンパイルされたBladeテンプレート、ファイルベースのセッション、ファイルキャッシュなど、フレームワークにより生成されるファイルが保存される tryPhp//storage/app # アプリケーションにより生成されるファイルを保存するために利用 tryPhp//storage/app/public # プロファイルのアバターなどのようなユーザーにより生成され、外部からアクセスされるファイルが保存される tryPhp//storage/framework # フレームワークが生成するファイルやキャッシュに利用 tryPhp//storage/framework/cache tryPhp//storage/framework/cache/data tryPhp//storage/framework/testing tryPhp//storage/framework/sessions tryPhp//storage/framework/views tryPhp//storage/logs # アプリケーションのログファイルが保存される tryPhp//public # アプリケーションへの全リクエストの入り口となり、オートローディングを設定するindex.phpファイルが格納される tryPhp//public/svg tryPhp//public/css tryPhp//public/js tryPhp//routes tryPhp//vendor # Composerによる依存パッケージが配置される # 省略
動かして画面を見てみます。
# 開発サーバをhttp://localhost:8000として起動します。 $ php artisan serve Laravel development server started: <http://127.0.0.1:8000>
http://localhost:8000/にブラウザでアクセスするとLaravelの画面が表示されました。
PHPにはビルトインウェブサーバーというテスト用の開発サーバがくっついています。
# php -Sのコマンドでもphp artisan serveと同じように動作します。 $ php -S localhost:8000 -t public PHP 7.3.1 Development Server started at Tue Feb 19 23:12:16 2019 Listening on http://localhost:8000 Document root is /Users/mana/Dropbox/ApacheDcumentRoot/tryPhp/public Press Ctrl-C to quit.
ディレクトリパーミッションを設定します。
Laravelをインストールした後に、多少のパーミッションの設定が必要です。storage下とbootstrap/cacheディレクトリをWebサーバから書き込み可能にしてください。設定しないとLaravelは正しく実行されません。
インストール 5.7 Laravel
$ cd tryPhp/ # 権限を確認します $ ls -l | grep storage drwxr-xr-x@ 5 mana staff 160 12 15 23:37 storage $ ls -l bootstrap/ total 8 -rw-r--r--@ 1 mana staff 1620 12 15 23:37 app.php drwxr-xr-x@ 5 mana staff 160 2 19 22:24 cache # 書き込み権限を追加する $ chmod o+w storage/ $ chmod o+w bootstrap/cache/ # 権限を確認します $ ls -l | grep storage drwxr-xrwx@ 5 mana staff 160 12 15 23:37 storage $ ls -l bootstrap/ total 8 -rw-r--r--@ 1 mana staff 1620 12 15 23:37 app.php drwxr-xrwx@ 5 mana staff 160 2 19 22:24 cache
サービスマネジメントシステムの規格はJIS Q 20000です。
- 前回の勉強内容
- 今回の勉強内容 : JIS Q 20000って何?
- ITサービスマネジメントは、ITシステムによる利用者が必要とするサービス提供を管理することです。
- ISO/IEC 20000は、ITサービスマネジメントシステムに関する国際規格です。
- 次回の勉強内容
前回の勉強内容
今回の勉強内容 : JIS Q 20000って何?
勉強のきっかけになった問題
ITサービスマネジメントの情報セキュリティ管理プロセスに対して,JIS Q 20000-1(サービスマネジメントシステム要求事項)が要求している事項はどれか。
ア. CMDBに記録されているCIの原本を,セキュリティが保たれた物理的又は電子的に格納庫で管理しなければならない。
イ. 潜在的な問題を低減させるために,予防処置をとらなければならない。
ウ. 変更要求が情報セキュリティ基本方針及び管理策に与える潜在的影響を評価しなければならない。
エ. 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。
ITサービスマネジメントは、ITシステムによる利用者が必要とするサービス提供を管理することです。
- 英語 : IT Service Management
- 略称 : ITSM
- ITシステムを開発・運用することが業務の主目的になりがち・・・
- 利用者視点が不足してしまい、ユーザーの満足度向上に課題になってしまう
- だから、利用者視点でITサービスの提供を考える <<< ITサービスマネジメント
- ITシステムの開発・運用は、ITサービスを提供するための手段
- ビジネス環境や情報技術の変化に合わせて改善を続けていく
ITサービスマネジメントシステムは、ITサービスマネジメントをPDCAサイクルに基づいて維持管理と継続的改善を行っていくための仕組みです。
- 略称 : ITSMS
ITSMSの構築
ITSMS(ITサービスマネジメントシステム)とは - 情報マネジメントシステム認定センター(ISMS-AC)
ITサービスマネジメントシステム(ISO/IEC20000): 品質向上のための取り組み | NECネクサソリューションズ
ITサービスマネジメントにおける成功事例体系化した書籍群をITILといいます。
- 英語 : Information Technology Infrastructure Library
サービスの企画・構築・運用というシステムライフサイクルに沿って、5つのカテゴリに分類されています。
- サービス・ストラテジ
- サービス・デザイン
- サービス・トランジション
- サービス・オペレーション
- 継続的なサービス改善
ITILとは – システム管理者なら押さえておきたい、ITIL用語解説 | ITサービス管理ソリューション「SmartStage|スマートステージ」
ISO/IEC 20000は、ITサービスマネジメントシステムに関する国際規格です。
ISO/IEC 20000の日本版が、JIS Q 20000です。
JIS Q 20000は、2部構成になっています。
JIS Q 20000-1は、サービス提供者に対する要求事項が定義されています。
- サービスマネジメントシステムの一般要求事項
- 経営者の責任 / 他の関係者が運用するプロセスのガバナンス / 文書の運用管理 / 資源の運用管理 / SMS の確立及び改善
- 新規サービス又はサービス変更の設計及び移行
- 一般 / 新規サービス又はサービス変更の計画 / 新規サービス又はサービス変更の設計及び開発 / 新規サービス又はサービス変更の移行
- サービス提供プロセス
- サービスレベル管理 / サービスの報告 / サービス継続及び可用性管理 / サービスの予算業務及び会計業務 / 容量・能力管理
- 情報セキュリティ管理 : 以下を特定するために変更要求を評価しなければならない
- 新たな情報セキュリティリスク、又は変化した情報セキュリティリスク
- 既存の情報セキュリティ基本方針及び管理策への潜在的影響
- 関係プロセス
- 事業関係管理 / 供給者管理
- 解決プロセス
- インシデント及びサービス要求管理
- 問題管理 : 潜在的な問題を低減させるために,予防処置をとらなければならない。
- 統合的制御プロセス
- 構成管理 : CMDBに記録されているCIの原本を,物理的又は電子的にセキュリティが保たれた書庫で管理しなければならない。
- 変更管理 : 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。
- リリース及び展開管理
JIS Q 20000-2は、実践のための規範が定義されています。
次回の勉強内容
YAMLって何?
YAMLは、データ構造の書き方です。
入門Python3のサンプルコードでYAMLに触れてみます。
これが、YAMLのファイルです。
YAMLには「ハッシュ」「配列」「スカラー」の3つの書き方を組み合わせてデータを表現します。
「キー: 値」形式で表されるのもがハッシュです。
「:」のあとには半角スペースを必ず入れます。
name: first: James last: McIntyre
「- 値とかキー」形式で配列になります。
「-」のあとには半角スペースを必ず入れます。
poems: - title: 'Motto' text: | Politeness, perseverance and pluck, To their possessor will bring good luck. - title: 'Canadian Charms' text: | Here industry is not in vain, For we have bounteous crops of grain, And you behold on every field Of grass and roots abundant yield, But after all the greatest charm Is the snug home upon the farm, And stone walls now keep cattle warm.
PyYMLをインストールします。
# 仮想環境をつくって、 $ python3 -m venv tryYaml $ source tryYaml/bin/activate (tryYaml) $ cd tryYaml/ # PyYAMLをインストールします。 $ pip3 install PyYAML Collecting PyYAML Downloading https://files.pythonhosted.org/packages/9e/a3/1d13970c3f36777c583f136c136f804d70f500168edc1edea6daa7200769/PyYAML-3.13.tar.gz (270kB) 100% |████████████████████████████████| 276kB 1.1MB/s Installing collected packages: PyYAML Running setup.py install for PyYAML ... done Successfully installed PyYAML-3.13 $ pip list Package Version ---------- ------- pip 19.0.1 PyYAML 3.13 setuptools 39.0.1 # YAMLファイルをGitHubからダウンロードします。 (tryYaml) $ wget https://raw.githubusercontent.com/madscheme/introducing-python/master/storage/mcintyre.yaml --2019-01-31 00:43:54-- https://raw.githubusercontent.com/madscheme/introducing-python/master/storage/mcintyre.yaml raw.githubusercontent.com (raw.githubusercontent.com) をDNSに問いあわせています... 151.101.108.133 raw.githubusercontent.com (raw.githubusercontent.com)|151.101.108.133|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 654 [text/plain] `mcintyre.yaml' に保存中 mcintyre.yaml 100%[===========================================================================================>] 654 --.-KB/s 時間 0s 2019-01-31 00:43:54 (13.0 MB/s) - `mcintyre.yaml' へ保存完了 [654/654] (tryYaml) $ ls -l total 136 drwxr-xr-x@ 12 mana staff 384 1 30 23:54 bin drwxr-xr-x@ 2 mana staff 64 1 30 23:52 include drwxr-xr-x@ 3 mana staff 96 1 30 23:46 lib -rw-r--r--@ 1 mana staff 654 1 31 00:43 mcintyre.yaml -rw-r--r--@ 1 mana staff 61 1 30 23:53 pip-selfcheck.json -rw-r--r--@ 1 mana staff 114 1 30 23:52 pyvenv.cfg
コードを書きます。
# ソースファイルを作って (tryYaml) $ echo -n > tryyml.py # SublimeTextで開きます。 (tryYaml) $ subl tryyml.py
実行するとYAMLファイルの内容を読み込めたことがわかります。
(tryYaml) $ python3 tryyml.py detailsの内容: {'bearded': True, 'themes': ['cheese', 'Canada']} poemsの数: 2 poemsの1つ目のタイトル: Motto datesの型: <class 'dict'> datesのbirthの型: <class 'datetime.date'> detailsのbeardedの型: <class 'bool'> detailsのthemesの型: <class 'list'> booksのurlの型: <class 'str'> poemsのtextの型: <class 'str'> (tryYaml) $