はじめてAWSのEC2でUbuntuを作ってSSHとリモートデスクトップで接続した時の記録

ドキュメントどおりにやっていれば超簡単にできます。
が、無駄につまずくので記録します。

AWSのアカウントを作成します。

aws.amazon.com

住所は英語で入力します。

www.scriptlife.jp

EC2インスタンスを作成してSSH接続します。

EC2インスタンスを作成します。

参考 : 仮想マシンの起動

  1. AWSマネジメントコンソールの[EC2]からEC2 コンソールを表示します。
  2. [インスタンス]でインスタンスの一覧を表示します。
  3. [インスタンスの作成]ボタンで作成画面を表示します。
  4. [次のステップ〜]ボタンで進めながら内容を入力していきます。以下以外は規定値のままとしました。
    • 1. AMI の選択
      • Amazon マシンイメージ (AMI) : Ubuntu Server 18.04 LTS (HVM), SSD Volume Type - ami-0fc20dd1da406780b (64 ビット x86)
    • 2. インスタンスタイプの選択
      • インスタンスタイプ : 汎用t2.micro >> 後で「t2.medium」に変更しました。
    • 3. インスタンスの設定
      • 終了保護の有効化 : ON
    • 5. タグの追加
      • [キー]=「Name」、[値] = 「Ubuntu18.04」
      • [インスタンス / ボリューム] = チェックON(作ったインスタンスが後でなんだかわかるように名前を設定しました)
    • 6. セキュリティグループの設定
      • セキュリティグループの割り当て : 新しいセキュリティグループを作成する
      • タイプ : SSH
      • プロトコル : TCP
      • ポート範囲 : 22
      • ソース : 自分のパブリックIPアドレス(xxx.xxx.xxx.xxx/32)
  5. [確認と作成]ボタンで確認画面を表示して内容を確認します。
  6. [起動]ボタンで鍵の作成について選択して[インスタンスの作成]ボタンでインスタンスを作成します。
    • 作成にはちょっと時間がかかります。

f:id:ponsuke_tarou:20200225201334p:plain

SSH接続します。

  • 環境
    • 接続元 : macOS Catalina バージョン10.15.3
    • ssh : OpenSSH_7.9p1, LibreSSL 2.7.3
  1. インスタンス作成時に取得した鍵の権限を設定します。
  2. インスタンスの一覧から作成したインスタンスを選択して詳細画面を表示し、インスタンスIPv4パブリックIPを確認します。
  3. 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コマンドをインストールしてみました。

ponsuke-tarou.hatenablog.com

作った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

セキュリティグループに設定を追加します。

  1. AWSマネジメントコンソールの[EC2]からEC2 コンソールを表示します。
  2. [インスタンス]でインスタンスの一覧を表示します。
  3. インスタンスの一覧から作成したインスタンスを選択して詳細画面を表示し、セキュリティグループ名のリンクでセキュリティグループの画面表示します。
  4. [インバウンド]タブの[編集]ボタンでダイアログを表示します。
  5. [ルールの追加]ボタンで行を追加して以下を設定します。
    • タイプ : RDP
    • ルール : TCP
    • ポート : 3389
    • ソース : 自分のパブリックIPアドレス(xxx.xxx.xxx.xxx/32)
  6. [保存]ボタンで保存してダイアログを閉じます。

Mac側を設定します。

リモートデスクトップアプリをインストールします。
  1. Apple StoreからMicrosoft Remote Desktop 10をインストールします。
Ubuntuリモートデスクトップ接続します。
  1. Microsoft Remote Desktop 10を起動して[Add PC]ボタンで設定画面を開きます。
  2. インスタンスIPv4パブリックIP」と「Ubuntuで作成したユーザー」を設定して[Add]ボタンで設定を追加します。
  3. 追加された設定をダブルクリックします。
  4. 初めての場合はダイアログが表示されるので[Connect]ボタンで進めます。
    • f:id:ponsuke_tarou:20200304223132p:plain
  5. Ubuntuに接続できました。

f:id:ponsuke_tarou:20200304223310p:plain

失敗したこと

Amazon Machine Image (AMI) で何を選択したかによってSSH接続する時のユーザ名が異なります。

ドキュメントの例では、

ですが初めて作ったインスタンスでは

でした。
これに気がつくのにかなり時間がかかりました。
xn--o9j8h1c9hb5756dt0ua226amc1a.com

インスタンスタイプが「t2.micro」では小さすぎた。

インスタンスタイプを「t2.micro」で作成しました。
SSH接続して作業するには問題なかったのですが、
デスクトップ環境をインストールしてリモートデスクトップ接続したところ
画面は表示されるものの全然動かない!
なので「t2.medium」に変更しました。
無料枠から外れてしまうのですが動かないよりはいいかと・・・。

f:id:ponsuke_tarou:20190501212514j:plain
乙女の滝

サイドチャネル攻撃とテンペスト攻撃の違い

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

テンペスト攻撃を説明したものはどれか。

  1. 故意に暗号化演算を誤動作させて正しい処理結果との差異を解析する。
  2. 処理時間の差異を計測して解析する。
  3. 処理中に機器から放射される電磁波を観測して解析する。
  4. チップ内の信号線などに探針を直接当て,処理中のデータを観測して解析する。

平成30年春期問13 テンペスト攻撃を説明したもの|情報処理安全確保支援士.com

サイドチャネル攻撃とテンペスト攻撃は、暗号装置を解析し暗号を盗む方法に使用されます。

サイドチャネル攻撃は、動いている装置から出る電流や電磁波・振動を計測して暗号解析の手がかりを得る攻撃です。

  • 英語 : Side Channel Attack
  • 外部と隔離された機器でも攻撃される可能性があります。

https://www.keirex.com/img/CypherAttack_j.jpg
ケイレックス・テクノロジー >> システムソリューション技術 >> 暗号セキュリティーの脅威と対策

https://www.togawa.cs.waseda.ac.jp/img/research/secu-sidechannel-attack.png
研究紹介 | 早稲田大学 戸川研究室

http://www.ec.okayama-u.ac.jp/~sws/nogami/Works/pic5.png
SCOPE:IoT時代における機器認証を安全に実現するセキュリティ計算チップの開発

テンペスト攻撃は、サイドチャネル攻撃の種類の1つです。

テンペスト攻撃は、機器やその周辺機器から出力される微弱な電磁波を計測して元情報を復元しようとします。

ディスプレイから発生される電磁波の放射レベルは強く、復号も容易になっています。
https://cybersecurity-jp.com/wp000/wp-content/uploads/2018/10/img_27685_1.png
テンペスト技術とは?遠隔で不正に情報を傍受する技術への対策について

漏洩電磁波から画面表示を“再現”したパソコン・モニター
https://tech.nikkeibp.co.jp/it/free/ITPro/NEWS/20041124/153009/1.jpg
「10万円の受信機でパソコンからの漏洩電磁波を“盗聴”できる」――ISTがデモ | 日経 xTECH(クロステック)

サイドチャネル攻撃には、他にも種類があります。

http://tooljp.com/windows/chigai/img/sidechannel-attack-valiation.png
サイドチャネル攻撃とテンペスト攻撃の違い

https://www.uec.ac.jp/research/information/column/22/images/pct_03.jpg
ユニーク&エキサイティング研究探訪 No.22│電気通信大学

電力解析攻撃は、機器の電力を計測します。

  • 英語 : Simple Powering Analysis
  • 別名 : SPA

https://www.netagent.co.jp/study/blog/img/20170914/20170914_overview.png
RHme3 WriteUp 第2問 - セキュリティごった煮ブログ|ネットエージェント

故障利用攻撃は、故意に暗号化演算を誤動作させて正しい処理結果との差異を解析します。

  • 別名 : フォールト解析攻撃

https://image.itmedia.co.jp/enterprise/articles/0806/05/fta.jpg
確率論を究める――交通事故とシステムダウンの関係 (2/3) - ITmedia エンタープライズ

タイミング攻撃は、処理時間の差異を計測して解析します。

タイミング攻撃では、攻撃対象の処理の実装を分析して応答時間が変化する要因を見つけることで、入力とその応答時間から隠されたデータ(パスワードなど)の特定を試みます。
https://corgi-lab.com/blog/wp-content/uploads/2018/01/time-attack_result.png
corgi-lab.com

プローブ解析は、チップ内の信号線などに探針を直接当て,処理中のデータを観測する破壊型解析です。

  • 別名 : プロ―ビング

他にもCache攻撃、スキャンベース攻撃等色々あります。

次回の勉強内容

ponsuke-tarou.hatenablog.com

2進数の問題を見ると頭が混乱します。

前回の勉強内容

ponsuke-tarou.hatenablog.com

2進数の表現の問題

aを正の整数とし,b=aの2乗 とする。aを2進数で表現するとnビットであるとき,bを2進数で表現すると高々何ビットになるか。

  1. n+1
  2. 2n
  3. nの2乗
  4. 2のn乗

平成25年春期問1 2進数の表現|応用情報技術者試験.com

f:id:ponsuke_tarou:20190416193255p:plain
あの日の思い出

「高々」とは、「最大」のことです。

  • 読み方 : たかだか
  • bを2進数で表現すると高々何ビット = bを2進数で表現すると最大何ビット

数学において、高々(たかだか)という表現は、英語の at most に対応した厳密な意味を持つ用語である。
「xは高々2である」という表現は「xは多くとも2である」事、すなわち「x≦2」を意味する。
高々 (数学) - Wikipedia

超地道な解き方:「aを2進数で表現するとnビット」のnに値を入れて考えてみる。

  • aが2bitだと、bの最大は1001で4bitになる
    1. aの最大 = (2進数)11 = (10進数)2 + 1 = (10進数)3
    2. bの最大 = aの2乗 = (10進数)9 = (10進数)8 + 0 + 0 + 1 = (2進数)1001 = 4bit
  • aが3bitだと、bの最大は110001で6bitになる
    1. aの最大 = (2進数)111 = (10進数)4 + 2 + 1 = (10進数)7
    2. bの最大 = aの2乗 = (10進数)49 = (10進数)32 + 16 + 0 + 0 + 0 + 1 = (2進数)110001 = 6bit
  • aが4bitだと、bの最大は11100001で8bitになる
    1. aの最大 = (2進数)1111 = (10進数)8 + 4 + 2 + 1 = (10進数)15
    2. bの最大 = aの2乗 = (10進数)225 = (10進数)128 + 64 + 32 + 0 + 0 + 0 + 0 + 1 = (2進数)11100001 = 8bit
  • aが5bitだと、bの最大は1111000001で10bitになる
    1. aの最大 = (2進数)11111 = (10進数)16 + 8 + 4 + 2 + 1 = (10進数)31
    2. 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ツールを使ってちょっと大きめの値で確認してみる

サイトで紹介されている解き方

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に対して、https://www.ap-siken.com/kakomon/22_haru/img/01.gifと定義する。next(n)と恒等的に等しい式はどれか。ここで,x AND y 及び x OR y は,それぞれxとyを2進数表現にして,けたごとの論理積及び論理和をとったものとする。

  1. (n+1) AND 255
  2. (n+1) AND 256
  3. (n+1) OR 255
  4. (n+1) OR 256

平成22年春期問1 ビット演算の応用|応用情報技術者試験.com

「恒等的に等しい」とは「どのような場合でも等しい」ということらしい

detail.chiebukuro.yahoo.co.jp
oshiete.goo.ne.jp

超地道な解き方:2進数にして論理演算してみます。

  1. nの最大値である255は2進数で書くと1111111となり、nは7bitで書ける範囲ということになります。
  2. n < 255の場合は、next(n) = n + 1 になります。
  3. n = 255の場合は、next(255) = 0になります。
  4. 以下表のようになる論理演算を選ぶわけです。
(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
  1. 回答群から推理して (n + 1) と (255 か 256) の組み合わせの論理演算になるはずです。
  2. 論理演算下後に (n + 1) になるはずです。
  3. 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 になりました。
恒等式 - 合格☆情報処理技術者試験

f:id:ponsuke_tarou:20190417000727j:plain
思い出の一枚

次回の勉強内容

勉強中・・・

OP25BをしているプロバイダにはサブミッションポートかSMTPSかSTARTTLSを使おう

前回の勉強内容

ponsuke-tarou.hatenablog.com

メールを送信する時にSMPTというプロトコルを使います。

SMTPとは、電子メールを伝送するための通信手順の一つです。
残念ながら、セキュリティにはいろいろ問題がありました。
そのために「POP before SMTP」「SMTP-AUTH」「OP25B」などの対策が行われています。

POP before SMTPSMTP-AUTHは、ユーザー認証をしてからメールを送信する仕組みです。

ponsuke-tarou.hatenablog.com

OP25Bは、ネットワーク内から外部のコンピュータのTCPポート25番への通信を禁止します。

ponsuke-tarou.hatenablog.com

外部からメールを送信する場合にOP25BをしているプロバイダではTCPポート25番が使えません。
f:id:ponsuke_tarou:20190411232733p:plain

サブミッションポートは、メール送信専用に利用するTCPポート587番のことです。

OP25Bを実施しているプロバイダの場合はTCP25番ポートを通してのメール送信が出来なくなるけれど、このサブミッションポートを利用することで送信が可能となります。
サブミッションポートは、SMTP認証(SMTP-AUTH)と合わせて利用します。

TCPのサブミッションポート(ポート番号587)の説明として,適切なものはどれか。

  1. FTPサービスで,制御用コネクションのポート番号21とは別にデータ転送用に使用する。
  2. Webアプリケーションで,ポート80番のHTTP要求とは別に,サブミットボタンをクリックした際の入力フォームのデータ送信に使用する。
  3. コマンド操作の遠隔ログインで,通信内容を暗号化するためにTELNETのポート番号23の代わりに使用する。
  4. 電子メールサービスで,迷惑メール対策としてSMTPのポート番号25の代わりに使用する。

平成25年秋期問20 TCPのサブミッションポートの説明|情報処理安全確保支援士.com

https://www.ii-okinawa.ad.jp/support/mail/images/illust01.jpg
サブミッションポート(587番ポート)|ii-okinawa.ad.jp

https://ascii.jp/img/2009/08/04/851287/l/c7bbfa60ae6ddb31.jpg
ASCII.jp:メールシステムの脆弱性とその回避策 (4/4)|電子メールの秘密

SMTPSでは、TCPポート465番を使います。

SMTPSは、伝送路を暗号化するSSL/TLSSMTPに組み合わせたプロトコルです。

通常のSMTPとは異なる専用のポート番号(465番)を用いて最初からSSL/TLSにより通信を開始する方式。
トランスポート層において、データ完全性、機密性と通信相手を認証する機能を提供する。
アプリケーション層でクライアントとサーバは通常のSMTPを利用するが、コネクション自体はSSLもしくはTLSによって保護される。この動作はコネクションの確立時に行われる。クライアントやサーバがコネクションを確立する際、SSLTLSを利用するかどうかは分からないため、SMTPSのためのポート番号を割り当てることが一般的である。
SMTPS - Wikipedia

https://image.itmedia.co.jp/ait/articles/0801/18/wi-mailovssl01.gif
メールの送受信を暗号化するPOP3s/IMAP4s/SMTPs(over SSL)とは:Tech TIPS - @IT

https://image.itmedia.co.jp/ait/articles/0602/02/r13secripro4_02.gif
認証できないsmtpでメールを安全に送るには:セキュリティプロトコルマスター(4)(3/3 ページ) - @IT

STARTTLSは、専用のTCPポートを用意する必要がありません。

STARTTLSは、送信側と受信側のサーバ療法がSSL/TLSに対応していると通信を暗号化する仕組みです。
専用の決まったTCPポートを用意する必要がないので25番でも465番でも587番でも何番でも使えます。
なぜなら、いつもSSL/TLSに対応しているか確認してから通信するのでポート番号を決めてなくてOKなのです。

  • 通信の流れ
    1. 通常のSMTPで通信を開始(セッション開始時は平文で始まる)
    2. 「STARTTLS」コマンドで双方がSSL/TLSに対応しているか確認(暗号化のためのネゴシエーションを行う)
    3. 対応していればSSL/TLSで再接続する

f:id:ponsuke_tarou:20190415230552j:plain
思い出の一枚

次回の勉強内容

ponsuke-tarou.hatenablog.com

いろんな攻撃手法を薄く広く知る

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : いろんな攻撃手法を薄く広く知る

勉強のきっかけになった問題

データの破壊,改ざんなどの不正な機能をプログラムの一部に組み込んだものを送ってインストールさせ,実行させるものはどれか。

  1. DoS攻撃
  2. 辞書攻撃
  3. トロイの木馬 << 正解
  4. バッファオーバフロー攻撃

平成20年秋期問64 トロイの木馬|基本情報技術者試験.com

Dos攻撃DDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。

ponsuke-tarou.hatenablog.com

バッファオーバフロー攻撃は、メモリ領域のバッファを超えて他のメモリを上書きします。

https://cybersecurity-jp.com/wp000/wp-content/uploads/2018/03/img_18488-01.png
バッファオーバーフローとは?攻撃・対策方法とDoS攻撃との違いを解説

DOS攻撃とバッファオーバフロー攻撃は似ているけれど違うものです。
攻撃 やり方
DOS攻撃 大量にデータを送りつけてサーバをダウンさせる
バッファオーバフロー攻撃 バッファを溢れさせて、他のメモリに書き込むところに不正プログラムを仕込んで攻撃する

ブルートフォース攻撃は、ありとあらゆる文字列の組み合わせを片っ端から試してパスワードや鍵を見つける攻撃です。

ponsuke-tarou.hatenablog.com

辞書攻撃は、パスワードによく使われる文字を片っ端から入力して不正ログインを試みます。

もちろん手動では腱鞘炎になるのでツールを使ってガッツリ攻撃してきます。
ブルートフォース攻撃より「パスワードによく使われる文字」に絞るので効率は良いです。

https://iwiz-blog-cms.c.yimg.jp/c/blog-cms/about/blog/images/inline/dictionary.jpg
「スマホを落としただけなのに」スマホのセキュリティ対策 - Yahoo! JAPANコーポレートブログ

https://tech.nikkeibp.co.jp/it/article/COLUMN/20071126/287915/09_02.jpg
第17回 失敗しないパスワード管理(前編) | 日経 xTECH(クロステック)

https://store.boxil.jp/corp_media/images/corporation_cms_media_image/5470/244/large_e2a59e01-ea34-4c73-b7c9-e015433e31a8.jpg
https://boxil.jp/corp/samuraiz/mag/a81/

トロイの木馬とは、便利なソフトウェアに見せかけてユーザに被害を与える不正なプログラムです。

  • 英語 : Trojan Horse

便利なツールいろいろあるなぁ・・・って、よく確認しないと「トロイの木馬」に引っかかるです!

有用なソフトウェアに見せかけて配布された後,システムの破壊や個人情報の詐取など悪意ある動作をする。
平成24年春期問54 トロイの木馬の特徴|ITパスポート試験ドットコム

例えば・・・パソコン内部の秘密のファイルをインターネット上に送信したり、ファイルやディスク内容を破壊したりします。
感染機能は持っていませんので、感染増殖することはありません。が、そのためにワクチンソフトの検出対象外となります。

感染増殖はしないので、ワクチンソフトでは、基本的にトロイの木馬を検出の対象外としています。信頼できないサイトに便利なツールソフトウェアとして掲載されていても、そのプログラムはむやみにダウンロードして実行しないようにしましょう。
ウイルス用語辞典:IPA 独立行政法人 情報処理推進機構

サラミ法は、発覚しない程度に少量ずつの金銭や物品を窃取します。

不正行為が表面化しない程度に,多数の資産から少しずつ詐取する方法である。
平成25年秋期問43 サラミ法はどれか|基本情報技術者試験.com

https://securityblog.jp/karuta_image/karuta_023nu-thumb.jpg
【ぬ】 盗み出す 額は少額 サラミ法 | セキュリティかるた | 日立ソリューションズの情報セキュリティブログ

銀行預金の利息を着服する
預金の利息計算時には必ず1円未満の端数が生じる。この端数は微々たるものであるが、全ての口座から端数を集めれば大金になる。
実際に1960年代後半、アメリカ・ニューヨークの銀行で、プログラムに細工をして1セント未満の端数処理を四捨五入からすべて切り捨てに変更し、切り捨てられた端数を自分の口座に振り込ませるように改鼠する事件があった。

他人の口座から毎月1万円程度を不正に引き出す
スキミングなどの不正な手段によって他人のキャッシュカードのコピーを手にした人間が、1ヶ月あたり1万円 - 2万円以下の額を不正に引き出していた。
架空の電子商店をでっちあげてクレジットカード番号を大量に集め、大勢の人から少額ずつ詐取した事例がある。不正に引き落とされた金額は一人あたりではごく少額だったため、ほとんどの人はカードが不正に使われたことに気が付かなかった。
サラミ法 - Wikipedia

スキャベンジングは、日本語でゴミを漁るです。

  • 英語 : scavenging(scavenge : ゴミを漁る)
  • 別名 : ゴミあさり、トラッシング、ダンプスターダイビング

プログラム実行後のコンピュータ内部又はその周囲に残っている情報をひそかに探索して,必要情報を入手する方法である。
平成25年秋期問43 サラミ法はどれか|基本情報技術者試験.com

https://www.latron.jp/sites/default/files/inline-images/social-engineering4.png
ソーシャルエンジニアリングとは | ITスクールらとろん

次回の勉強内容

ponsuke-tarou.hatenablog.com

状態遷移から知る有限オートマトン

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : 状態遷移図を使って有限オートマトンを知る

勉強のきっかけになった問題

次の表は,入力記号の集合が{0,1},状態集合が{a,b,c,d}である有限オートマトン状態遷移表である。長さ3以上の任意のビット列を左(上位ビット)から順に読み込んで最後が110で終わっているものを受理するには,どの状態を受理状態とすればよいか。
https://www.ap-siken.com/kakomon/18_aki/img/07.gif

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

図はマルチタスクで動作するコンピュータにおけるタスクの状態遷移を表したものである。実行状態のタスクが実行可能状態に遷移するのはどの場合か。
https://www.fe-siken.com/kakomon/23_aki/img/20.gif

  1. 自分より優先度の高いタスクが実行可能状態になった。
  2. タスクが生成された。
  3. 入出力要求による処理が完了した。
  4. 入出力要求を行った。

平成23年秋期問20 タスクの状態遷移|基本情報技術者試験.com

f:id:ponsuke_tarou:20190402224738p:plain

状態遷移表は、発生する可能性のあるイベントと状態の組み合わせから生じる結果を示す遷移をテーブルで表したものです。
  • 英語 : state table
  • 無効な遷移と、有効な遷移の両方を示します。
  • 特徴
    • 「できないこと」を洗い出せる
    • 仕様があいまいな個所に潜む欠陥を発見できる
      • 全ての状態と全てのイベントを組み合わせるので、仕様のあいまいな個所を特定できる
    • 状態遷移図の不備を見つけることができる

次の表は,文字列を検査するための状態遷移表である。検査では,初期状態をaとし,文字列の検査中に状態がeになれば不合格とする。
解答群で示される文字列のうち,不合格となるものはどれか。ここで,文字列は左端から検査し,解答群中の△は空白を表す。
https://www.fe-siken.com/kakomon/18_haru/img/09.gif

ア. +0010 イ. -1 ウ. 12.2 エ. 9.△
平成18年春期問9 状態遷移表|基本情報技術者試験.com

f:id:ponsuke_tarou:20190402224451p:plain

図は,偶数個の1を含むビット列を受理するオートマトン状態遷移図であり,二重丸が受理状態を表す。a,bの正しい組合せはどれか。
https://www.ap-siken.com/kakomon/25_haru/img/03.gif
回答群
https://www.ap-siken.com/kakomon/25_haru/img/03a.gif
平成25年春期問3 オートマトンの状態遷移図|応用情報技術者試験.com
f:id:ponsuke_tarou:20190402225742p:plain

状態遷移図状態遷移表は、各メリットを合わせてお互いを見合わせながら整理することでテストケースを洗い出す事ができます。

状態遷移図では動作を想定しながら作るので「できること」に着目しがちですが、状態遷移表は状態とイベントを網羅的に組み合わせるので「できないこと」にも気が付けるのです。
性格が違うのだからどちらかあればいいってわけではないのですね。

f:id:ponsuke_tarou:20190402223808p:plain
この日の思い出

オートマトンは、入力から内部の状態と規則に従い結果を出力する仮想的な自動機械です。

  • 英語 : automaton

e-words.jp

入力と状態の数がある程度決まっているのが有限オートマトンです。

  • 別名 : 有限状態機械

有限個の状態と遷移と動作の組み合わせからなる数学的に抽象化された「ふるまいのモデル」である。
デジタル回路やプログラムの設計で使われることがあり、ある一連の状態をとったときどのように論理が流れるかを調べることができる。有限個の「状態」のうち1つの状態をとる。ある時点では1つの状態しかとらず、それをその時点の「現在状態」と呼ぶ。
何らかのイベントや条件によってある状態から別の状態へと移行し、それを「遷移」と呼ぶ。それぞれの現在状態から遷移しうる状態と、遷移のきっかけとなる条件を列挙することで定義される。
有限オートマトン - Wikipedia

図で表される有限オートマトンで受理される文字列はどれか。ここでhttps://blogs.c.yimg.jp/res/blog-fc-69/u_mana80/folder/555192/26/12834726/img_10?1472221498は初期状態を,https://www.fe-siken.com/kakomon/18_aki/img/11_2.gif受理状態を表す。
https://www.fe-siken.com/kakomon/18_aki/img/11.gif
ア 01011     イ 01111     ウ 10111     エ 11110
平成18年秋期問11 有限オートマトン|基本情報技術者試験.com
f:id:ponsuke_tarou:20190402232447p:plain

勉強のきっかけになった問題も状態遷移図を書いてみるとわかりやすいです。

f:id:ponsuke_tarou:20190402232736p:plain

f:id:ponsuke_tarou:20190402223714p:plain
いつかの思い出

次回の勉強内容

ponsuke-tarou.hatenablog.com

ページング方式におけるページインだけの処理の割合

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : ページング方式の基本用語を理解したい。

勉強のきっかけになった問題

ページング方式の仮想記憶において,あるプログラムを実行したとき,1回のページフォールトの平均処理時間は30ミリ秒であった。ページフォールト発生時の処理時間が次の条件であったとすると,ページアウトを伴わないページインだけの処理の割合は幾らか。

ページフォールト発生時の処理時間〕
(1) ページアウトを伴わない場合,ページインの処理時間は20ミリ秒である。
(2) ページアウトを伴う場合,置換えページの選択,ページアウト,ページインの合計処理時間計60ミリ秒である。

  1. 0.25
  2. 0.33
  3. 0.67
  4. 0.75

平成28年春期問17 ページインだけの処理の割合|応用情報技術者試験.com

f:id:ponsuke_tarou:20190401194116p:plain
いつかの思い出

ページング方式とは、メモリ領域をページと呼ばれる一定の大きさの領域に分割し、物理的なアドレスとは別に仮想的なアドレスを割り当てて管理する方式です。

物理メモリが不足した時に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

ページング方式の仮想記憶を使うとプログラムやデータを不連続な主記憶に割り付けることができます。

細切れのメモリ空間を連結して一つの連続した空間として利用したり、補助記憶装置(ハードディスクなど)上にも仮想的なメモリ領域を確保することで、物理メモリの容量を超えてメモリ空間を利用することができます。

f:id:ponsuke_tarou:20190401204406p:plain
どこかの思い出

仮想アドレスと物理アドレスマッピングを格納するページテーブルを使って管理します。

ページング方式では、OSさんが仮想アドレスと物理アドレスマッピングを格納するページテーブルを使って物理メモリと仮想メモリを管理してくれます。
ここで、仮想メモリはページ単位なのに物理メモリが違う大きさで管理されていると行き来が大変なので、ページと同じ大きさのカタマリで管理します。
この物理メモリのカタマリをページフレームとか物理ページとかフレームとかっていいます。

管理するために同じサイズにデータを分割した1つ1つがページです。

https://wa3.i-3-i.info/img/data/3300/d003352-8.pnghttps://wa3.i-3-i.info/img/data/3300/d003352-9.pnghttps://wa3.i-3-i.info/img/data/3300/d003352-10.png
https://wa3.i-3-i.info/word13352.html

f:id:ponsuke_tarou:20190401200151p:plain
あの日の思い出

アクセスしようとした領域が物理メモリではなく仮想メモリにある場合に発生する割り込み処理をページフォールトといいます。

  • 英語 : page fault

ページング方式の仮想メモリにおいて、プロセスがアクセスしようとしたページが物理メモリ上に無く、仮想メモリにあるときに仮想メモリを管理する制御装置が発する例外あるいは割込処理をページフォールトといいます。
このページフォルトは、エラーっぽい名前だけれどとかでとか来た時に表示される通知やお知らせ的な存在です。
そのページフォルトをOSさんが検知して物理メモリに必要なページを読み込んでくれます。

f:id:ponsuke_tarou:20190401200306p:plain
ぬのたき

リストラ的にページフレームを追い出すことをページアウトといいます。

ページング方式では「プロセスが使ってる部分は物理メモリ、使ってない部分は仮想メモリを使う」「仮想メモリはページというカタマリで使われていく」、そして「使ってなかった部分を使うときは仮想メモリから物理メモリを使うようにする」ことがわかりました。
が、物理メモリが空いていればいいけど、空いていなかったらどうするんだろう?

物理メモリが空いていなかったら、どれかのページを追い出すんです!
どのページフレームを追い出すかってのはアルゴリズムによって違います。

逆にデビュー的にページをページフレームに読み込むことをページインとかスワップインといいます。

f:id:ponsuke_tarou:20190401202233p:plain
この日の思い出

次回の勉強内容

ponsuke-tarou.hatenablog.com

SQLインジェクション

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : SQLインジェクションの対策を学ぶ

勉強のきっかけになった問題

SQLインジェクション対策について,Webアプリケーションの実装における対策とWebアプリケーションの実装以外の対策として,ともに適切なものはどれか。
https://www.sc-siken.com/kakomon/28_aki/img/17.gif
情報セキュリティスペシャリスト 平成28年秋期 午前Ⅱ 問17

SQLインジェクションとは、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のことです。

  • 別名 : ダイレクトSQLコマンドインジェクション, SQL注入
  • 英語 : SQL injection(注入,投入)

https://blogs.mcafee.jp/wp-content/uploads/2018/06/sqlinjection-1.jpg
https://blogs.mcafee.jp/wp-content/uploads/2018/06/sqlinjection-2.jpg
SQLインジェクション攻撃への対策|脆弱性を悪用する仕組みと具体例

https://www.scutum.jp/information/web_security_primer/images/web_security_primar_ph_05.gif
【2】SQLインジェクションによる顧客情報流出 ― 不正アクセスの横綱!| Webサイトセキュリティ対策入門 by WAF「Scutum」プロジェクト

対策 : SQLを埋め込むところで特殊文字を適切にエスケープ

'    →  ''
\   →  \\
今夜分かるSQLインジェクション対策:Security&Trust ウォッチ(42) - @IT

入力値で仕込んでデータが再利用されたときに効力を発揮するセカンドオーダーSQLインジェクション

たとえアプリケーションが常にシングルクオートをエスケープしていても、 攻撃者はなおも、データベース中のデータがそのアプリケーションで再利用さ れるときにSQLをインジェクトすることができます。

  • 例えば・・・
    1. 攻撃者がアプリケーションに登録して、ユーザ名「admin'--」、 パスワード「password」のユーザ名を作る
    2. アプリケーションはシングルクオートを正しくエスケープして、INSERT文が作られる
      • insert into users values ( 123, 'admin''--', 'password', 0xffff)
    3. 攻撃者がパスワードを変更する
      • update users set password = '" + newpassword + "’ where username = '" + rso ( "admin'--") + "'"
    4. 最初にせっかくエスケープしたのに次には・・・・されず・・・クエリが生成される
      • update users set password = 'password' where username = 'admin'--'
    5. 攻撃者は、admin'-- というユーザを登録することによって、admin のパスワードを自由にセットできる

https://image.itmedia.co.jp/ait/articles/0611/02/r20_42_01.gif
今夜分かるSQLインジェクション対策:Security&Trust ウォッチ(42) - @IT

対策 : データベースでのアクセス権は最小限に留める

不正なSQLがWebアプリから送られても最小限のアクセス権だけを与えることで被害を軽減できます。

シングルクオーテーションを使わないSQLインジェクション

SQLインジェクション対策というと、「'」の扱いばかりが注目されるが、「'」を使わなくても成立する攻撃もあります。

  • 例えば・・・
    1. SELECT name FROM user where uid = '$uid' AND age > $age
    2. 渡される$uidと$ageの特殊文字は、適切にエスケープ!が、こんなものがきたら・・・
      • $uid:ueno
      • $age:31 UNION…
    3. SELECT name FROM user where uid = ' ueno ' AND age > 31 UNION……
    4. UNION以降のSQLも実行されてしまう・・・
    5. 対策 : 問題は、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の呼び出し方 - Qiita

PreparedStatement prep = conn.prepareStatement("SELECT * FROM employee WHERE name=?");
prep.setString(1, "山田");

マルチバイト文字の問題

  • 例えば・・・入力値「\x97' OR A=A」をエスケープ処理すると「予' OR A=A」になる
    1. 「\x97' OR A=A」の「'」を「\'」とエスケープして処理する
      • \x97' > \x97\' (「\x97」だけでは意味をなさない)
    2. 「\'」の部分をエンコードする
      • \x97\' > \x97\x5C\x27 > \x97\x5C(予)\x27( ' ) > 予'
    3. 結果としてエスケープ処理すると「予' OR A=A」となり「'」を「\'」とエスケープしたが、「'」が残ってしまう

シフトJISは2バイト文字ですが、2バイト目に1バイト文字の文字コードを含んだ文字もあります。

  • \x94\x5C → 能
  • \x95\x5C → 表
  • \x96\x5C → 暴

「'」を「''」とエスケープしている場合にも同様の現象が起きる可能性がある。

対策 : クライアント側の文字コードシフトJISを使うのをやめてEUC-JPなどを使う

文字コードを変更できない場合の対策
  • 半端な1バイト文字を受け付けない処理を書く
  • マルチバイトを扱う関数を通して、文字コードを整理
// PHPの場合
// mb_convert_encoding — 文字エンコーディングを変換する
/* SJISエンコーディングからSJISに変換 */
$str = mb_convert_encoding($str, 'SJIS', 'SJIS');

f:id:ponsuke_tarou:20190331221754j:plain
思い出の一枚

次回の勉強内容

ponsuke-tarou.hatenablog.com

パイブライン処理での危険がパイブラインハザード

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : パイブライン処理での危険を学ぶ

勉強のきっかけになった問題

パイプライン方式のプロセッサにおいて,パイプラインが分岐先の命令を取得するときに起こるハザードはどれか。

  1. 構造ハザード
  2. 資源ハザード
  3. 制御ハザード > 正解
  4. データハザード

平成26年秋期問7 分岐命令で発生するハザード|応用情報技術者試験.com

パイブラインハザードは、パイプライン処理を止めたりやり直さなければならなくなり効率が悪くなることです。

  • 英語 : pipeline hazard

マイクロプロセッサ(MPU/CPU)のパイプライン処理で発生する問題の一つです。

そもそもハザードとは、危険の原因・危険物・障害物などを意味する英語です。

  • 英語 : hazard

https://resilient-medical.com/wp-content/uploads/2018/05/hazard1-600x450.jpg
https://resilient-medical.com/risk/hazard

ハザードの種類は、原因によって分けられます。

制御ハザードは、分岐命令によって先取りした命令が無駄になることです。

  • 別名 : 分岐ハザード
  • 例えば・・・
    • 条件分岐で実行の流れが二つに分かれる場合、条件の評価を待たずに先行して片方の分岐の命令群をパイプラインに投入することになるが、条件を評価した結果もう一方に分岐することが確定した場合、パイプラインの内容を破棄して正しい分岐の命令群を投入しなおさなければならない。
    • 分岐命令を実行した場合、次に実行される命令は、分岐が成立した場合と不成立の場合の2通りがある。分岐が成立しないと仮定して命令を先取りすると、分岐が成立した場合に先取りした命令をキャンセルし、改めて分岐が成立した場合の命令を実行しなければならない。

制御ハザードによって先取りした命令のキャンセルが発生し、ムダになったクロック*1のことをインターロック*2もしくはストール*3という。

http://security2600.sakura.ne.jp/main2/image3/hazard1.jpg
パイプラインハザード - Security Akademeia

解決方法
  • 分岐先が判明するまで先取りしない
  • 常に分岐が不成立(あるいは成立)と仮定して先取りを進める
  • 場合によってはストールが起こることを容認する。

f:id:ponsuke_tarou:20190315214631p:plain
飛鳥山公園

データハザードは、命令が直前の命令の実行結果を使用する場合に発生します。

ある命令が直前の命令の処理結果を利用するような場合に、実行結果を待たなければパイプラインが進められない状況が発生します。

http://security2600.sakura.ne.jp/main2/image3/hazard2.jpg
パイプラインハザード - Security Akademeia

https://image.slidesharecdn.com/sample-150315081741-conversion-gate01/95/cpu-16-638.jpg?cb=1449891681
CPUの同時実行機能

解決方法
  • NOP命令を挿入する
  • データハザードを検知したら実行結果を次の命令に直接たわしてしまう
    • 演算装置によってハードウェア的に実現される

構造ハザードは、CPU内部の資源の衝突によって発生します。

複数の命令をパイプラインで並行に処理する過程で、同じタイミングで同じハードウェア資源にアクセスしようとするなど競合が発生し、処理がつっかえることがあります。

  • 例えば・・・
    • 命令Aがメモリへの書込を行っているのと同じタイミングで後続の命令Bがメモリの読込をしようとするとメモリアクセスがバッティングします。バッティングしないようにするために命令Bは1クロック処理を遅らせる必要があります。これにより1クロック分遅延します。

https://news.mynavi.jp/article/architecture-124/images/002.gif
https://news.mynavi.jp/article/architecture-124/images/003.gif
コンピュータアーキテクチャの話(124) パイプライン処理と構造的ハザード | マイナビニュース

http://memes.sakura.ne.jp/memes/wp-content/uploads/2012/03/risc_contention.png
http://memes.sakura.ne.jp/memes/wp-content/uploads/2012/03/risc_hazard.png
マイコンの構造と処理3 – ミームス(MEMEs)のサポートページ

解決方法
  • ハードウェア的に回避することは可能。
    • しかし完全に構造ハザードを起こさない構成はコストの上昇を招く。
    • 構造ハザードの確率が低ければ、コスト上昇を抑えるために、多少の構造ハザードを無視するのが現実的である。

f:id:ponsuke_tarou:20190315003545p:plain
思い出の一枚

次回の勉強内容

勉強中・・・

*1:CPUの動作基準となる時間の単位で、このクロックの整数倍の時間をかけて命令を実行していきます。命令パイプライン中の1ステージの実行には最低1クロックかかるので、4ステージ構成の命令パイプラインでは、1個の命令を実行完了するためには、最低でも4クロックの時間が必要となります。CPUをはじめとしたコンピュータの各回路は、一定の時間で刻まれるクロック信号に歩調を合わせながら処理を行っています。 このクロック信号は、非常に正確な時間間隔でパルス(非常に短い時間の間だけ変化する電流)を発生する水晶発振器によって生成されます。

*2:安全装置・安全機構の考え方の一つで、ある一定の条件が整わないと他の動作ができなくなるような機構のこと。

*3:命令パイプラインでは、除算命令のように命令の処理完了に長い時間がかかる場合、パイプラインに次の命令を取り込むのを待つ必要がある。この問題の解決策としてパイプラインの各段階が忙しいことを示せるようにして、パイプラインをインターロックして次の命令がステップを進まないように止めなければならない。これがストールであり、分岐のように中断以前の処理が無駄になる場合にはストールに加えて無駄となった処理時間分も加わり、これらがインターロックのロスとなる。

パイプライン処理の基本を学ぶ

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : パイプライン処理の基本を学ぶ

勉強のきっかけになった問題

スーパスカラの説明として、適切なものはどれか。

  1. 処理すべきベクトルの長さがベクトルレジスタより長い場合、ベクトルレジスタの組に分割して処理を繰り返す方式である。
  2. パイプラインを更に細分化することによって、高速化を図る方式である。
  3. 複数のパイプラインを用い、同時に複数の命令を実行可能にすることによって、高速化を図る方式である。
  4. 命令語を長く取り、一つの命令で複数の機能ユニットを同時に制御することによって、高速化を図る方式である。

必ず受かる情報処理技術者試験-平成24年度春季-応用情報技術者-問題・解答11

パイプライン処理とは、マイクロプロセッサの高速化手法の一つです。

プロセッサ内での命令処理は、複数の段階を順次行います。

  • 処理の段階
    1. 命令の読み込み(フェッチ)
    2. 解釈(デコード)
    3. 実行(エグゼキュート)
    4. 結果の書き込み(ライトバック)

通常は、前の命令のサイクルが完全に終わらないと、次の命令を処理し始めることはできません。

http://mt-net.vis.ne.jp/images/501/FE2000S_18_a1.gif
パイプライン処理 [徹底研究!情報処理試験]

パイプライン処理は、各段階の処理を独立して動作させることで、前の命令のサイクルが終わる前に次の命令を処理し始められます。

http://mt-net.vis.ne.jp/images/501/FE2000S_18_a2.gif
パイプライン処理 [徹底研究!情報処理試験]

パイプライン処理には種類があります。

命令の処理を独立して実行できる工程に分割するのが、命令パイプラインです。
  • 英語 : pipeline processing

https://image.slidesharecdn.com/kagamicomput201514-150713021412-lva1-app6892/95/kagamicomput201514-14-638.jpg?cb=1436753672
kagami_comput2015_14

レンダリング処理の高速化に特化しているのが、グラフィックスパイプラインです。

3次元コンピュータグラフィックスで、3次元から2次元のデータを作る多段階の過程全体をパイプライン処理によって高速化しています。

https://game.watch.impress.co.jp/img/gmw/docs/590/700/ps_42_s.gif
西川善司の3Dゲームファンのための「プレイステーション 4」グラフィックス」講座(後編) - GAME Watch

命令パイプラインによる並列化と同じ方法でループ処理を最適化するのが、ソフトウェアパイプラインです。

アウト・オブ・オーダー実行*1に似ているものの、命令の並べ替えがCPU ではなくコンパイラで 行われる点に違いがあります。

http://my-web-site.iobb.net/~yuki/wp-content/uploads/2017/06/200612_dsp04_pipe.jpg
TI C64x DSPによる画像認識の最適化実装 | ある計算機屋さんの手帳

スーパースカラは、複数のパイプラインで並列に命令を処理できるようにする機構です。

並列実行可能な複数の命令を,複数の演算器(パイプライン)に振り分けることによって並列に実行する。
平成31年春期問8 スーパスカラの説明はどれか|応用情報技術者試験.com

https://ascii.jp/elem/000/000/555/555472/fig1_c_740x500.jpg
https://ascii.jp/elem/000/000/555/555471/

https://image.itmedia.co.jp/edn/articles/1702/24/tt170224MCUQA35_001.jpg
スーパースカラって何? (1/3) - EDN Japan

スーパーパイプラインは、パイプラインの段階を細分化して多くすることで並走できる命令数を増やします。

http://www.myelq.com/Glossary/Images/superpipeline.gif
スーパーパイプライン

https://img.atwikiimg.com/www38.atwiki.jp/hiropknot/attach/69/47/%E3%83%91%E3%82%A4%E3%83%97%E3%83%A9%E3%82%A4%E3%83%B3.gif
コンピュータ構成要素 - hiropknot @ ウィキ - アットウィキ

http://www.ap-siken.com/kakomon/27_haru/img/09.gif
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

f:id:ponsuke_tarou:20190314233906p:plain
パイプライン制御方式
f:id:ponsuke_tarou:20190314231009p:plain
思い出の一枚

次回の勉強内容

ponsuke-tarou.hatenablog.com

*1:コンピュータのプロセッサー(CPU)が命令を処理するとき、規定の順番(操作手順)を守らないで実行するやりかた。命令を一時的に溜めておき、命令を細分化してできる作業から実行する方式。メリット:無駄な待ち時間が発生しないのでの作業を高速化できる。デメリット:作業の分割など手間のかかる作業が増えるので、処理工程は複雑になる

Dos攻撃とDDos攻撃はサーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。

前回の勉強内容

ponsuke-tarou.hatenablog.com

勉強のきっかけになった問題

マルチベクトル型DDoS攻撃に該当するものはどれか。

  1. 攻撃対象のWebサーバ1台に対して,多数のPCから一斉にリクエストを送ってサーバのリソースを枯渇させる攻撃と,大量のDNS通信によってネットワークの帯域を消費させる攻撃を同時に行う。
  2. 攻撃対象のWebサイトのログインパスワードを解読するために,ブルートフォースによるログイン試行を,多数のスマートフォンやIoT機器などの踏み台から成るボットネットから一斉に行う。
  3. 攻撃対象のサーバに大量のレスポンスが同時に送り付けられるようにするために,多数のオープンリゾルバに対して,送信元IPアドレスを攻撃対象のサーバのIPアドレスに偽装した名前解決のリクエストを一斉に送信する。
  4. 攻撃対象の組織内の多数の端末をマルウェアに感染させ,当該マルウェアを遠隔操作することによってデータの改ざんやファイルの消去を一斉に行う。

情報処理安全確保支援士平成30年秋期 午前Ⅱ 問4

Dos攻撃DDos攻撃は、サーバやサイトに大きな負荷をかけてダウンさせるサイバー攻撃です。

1つのIPアドレスから攻撃を仕掛けるのが、Dos攻撃です。

  • 英語 : Denial(否定・拒絶) of Service attack
  • 日本語 : サービス拒否攻撃
F5アタックは、一人でF5ボタンを押下し続ける寂しい攻撃です。

ブラウザでF5を押すと、画面をリロードしてくれます。しかもキャッシュ保存せずに。
なので、画面のデータを全部サーバへ要求します。
そしてF5を猛烈に連打するとサーバに負荷をかけることができます。

複数のIPアドレスから攻撃を仕掛けるのが、DDos攻撃です。

  • 英語 : Distributed(分散型の) Denial of Service attack
  • 日本語 : 分散型サービス拒否攻撃

https://www.nttpc.co.jp/service/ddos/img/img_index_03.jpg
DDoS対策サービス|ソリューション・サービス|【公式】NTTPC

DDos攻撃では、ボットネットが使われます。

外部からの遠隔操作に従って処理を実行するプログラムがボットです。それがたくさん集まったのがボットネットです。
残念ながら、自分のパソコンやスマホにボットが入ってしまうとDDos攻撃の加害者となります。

https://eset-info.canon-its.jp/files/user/malware_info/images/threat/150120_3/images/img01.jpg
ボットネットとは何か? どうやって防ぐのか? | サイバーセキュリティ情報局

ボットネットを遠隔操作するために指令を送ったり制御するサーバーが、C&Cサーバーです。
  • 英語 : Command and Control server

https://eset-info.canon-its.jp/files/user/malware_info/images/term/sa/images/171_1.jpg
C&Cサーバー | サイバーセキュリティ情報局

Miraiは、ランダムなIPアドレスを生成してtelnetポートにログインを試行し工場出荷時の弱いパスワードを使っているIoT機器などに感染を広げるとともにC&Cサーバからの指令に従って標的に対してDDoS攻撃を行うマルウェアです。
  • 読み方: ミライ

https://image.itmedia.co.jp/tf/articles/1704/13/tfayagi_mirai1704_fig01.jpg
IoTデバイスを狙うマルウェア「Mirai」とは何か――その正体と対策:超速解説 Mirai - TechFactory

感染した端末上でIPアドレスをランダムに走査し、新たな標的を見つけます。そして、工場出荷時のデフォルト値や単純なID/パスワードの組みによる辞書攻撃によって、標的IoT端末のtelnetポートへのログインを試みます。この動作を繰り返して、ボットネットを拡大していきます。Miraiが構築したボットネットは、過去最大級の規模のDDoS攻撃を引き起こしています。
情報処理安全確保支援士平成30年秋期 午前Ⅱ 問11

攻撃には、「フラッド型」「脆弱性」「マルチベクトル型」があります。

フラッド型は、大量データを送りつけて処理しきれなくなるようにします。

https://tech.nikkeibp.co.jp/it/article/COLUMN/20070307/264106/zu01.jpg
サービス妨害攻撃 --- DoS,DDoS,smarf,SYNフラッド,DNS amp | 日経クロステック(xTECH)

脆弱性は、脆弱性を利用して不正処理を行わせサービス機能を停止させます。

WAFは、Webアプリケーションの脆弱性を狙う攻撃を遮断するファイアウォールです。

ponsuke-tarou.hatenablog.com

マルチベクトル型は、複数の手法を組み合わせます。

攻撃対象のWebサーバ1台に対して多数のPCから一斉にリクエストを送って「サーバのリソースを枯渇させる」攻撃と大量のDNS通信によって「ネットワークの帯域を消費させる攻撃」を同時に行います。

https://businessnetwork.jp/Portals/0/Data/2019/02/22/A10_3.jpg?11915105630126
A10が機械学習でDDoS防御を自動化、追加ライセンスは不要で(ページ2) | ビジネスネットワーク.jp

f:id:ponsuke_tarou:20201001203726j:plain
那須岳朝日岳

OSI参照モデルネットワーク層トランスポート層が攻撃に使われやすいです。

第7層 アプリケーション層
第6層 プレゼンテーション層
第5層 セッション層
第4層 トランスポート層 <- 反射型DDoS攻撃 / DNSリフレクタ攻撃
第3層 ネットワーク層 <- ICMP Flood攻撃
第2層 データリンク層
第1層 物理層

反射型DDoS攻撃は、トランスポート層DNSサーバやNTPサーバを反射に使ってパケットを増幅させる攻撃です。

  • 別名 : リフレクション攻撃、DrDoS攻撃(Distributed Reflection Denial of Service attack)
UDPの性質を悪用したDDoS攻撃DNSリフレクタ攻撃があります。
  • 別名 : DNSアンプ攻撃

反射に利用されるサーバ(リフレクター)の特徴

  • UDPを使用している >> TCPに比べてIPアドレスを詐称しやすい
  • 問い合わせよりも応答の方が大きい >> 攻撃の効率が上がる

これらの特徴に合うのが、DNSサーバやNTPサーバです。

https://www.sc-siken.com/kakomon/30_aki/img/07.gif
情報処理安全確保支援士平成30年秋期 午前Ⅱ 問7

https://jprs.jp/glossary/imgs/reflection.png
JPRS用語辞典|DNSリフレクター攻撃(DNSアンプ攻撃)

ICMP Flood攻撃は、ネットワーク層のICMPを利用して回線を過負荷にさせる攻撃です。

ICMP Flood攻撃に該当するものはどれか。
答. pingコマンドを用いて大量の要求パケットを発信することによって,攻撃対象のサーバに至るまでの回線を過負荷にしてアクセスを妨害する。
https://www.sc-siken.com/kakomon/27_aki/img/10.gif
情報セキュリティスペシャリスト平成27年秋期 午前Ⅱ 問10

f:id:ponsuke_tarou:20190313221021j:plain
思い出の一枚

次回の勉強内容

ponsuke-tarou.hatenablog.com

メッセージカードコレクション2019春

1. 葉っぱ

f:id:ponsuke_tarou:20190220200446j:plain

2. あなたを考えています

f:id:ponsuke_tarou:20190220200514j:plain

3. 黒い花

f:id:ponsuke_tarou:20190220200544j:plain

4. 花と蝶

f:id:ponsuke_tarou:20190220200615j:plain

5. 花と鳥

f:id:ponsuke_tarou:20190220200701j:plain

6. 花とモルモット

f:id:ponsuke_tarou:20190220200737j:plain

7. 花とうさぎ

f:id:ponsuke_tarou:20190220200822j:plain

8. カラー

f:id:ponsuke_tarou:20190220201045j:plain

10. バラ

f:id:ponsuke_tarou:20190220201155j:plain

12. どシンプル

f:id:ponsuke_tarou:20190220201310j:plain

シール

f:id:ponsuke_tarou:20190220201224j:plain

Laravelのプロジェクトを作ってみる。

  • 環境
    • macOS Mojave version10.14.3
    • PHP 7.3.1
    • Composer version 1.8.0

Laravelは、ただで使えるMVCのWeb開発用フレームワークです。

laravel.com

Laravelをインストーラを使わないでインストールします。

readouble.com

Composer Create-Projectでインストールします。

$ composer create-project --prefer-dist laravel/laravel {プロジェクトの名前}
コマンドの説明です。

利用可能なリポジトリにある既存のパッケージを複製して自身のパッケージにしたい(パッケージをフォークしたい)
$ composer create-project [vendor]/[package]

qiita.com

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による依存パッケージが配置される
# 省略

readouble.com

動かして画面を見てみます。

# 開発サーバをhttp://localhost:8000として起動します。
$ php artisan serve
Laravel development server started: <http://127.0.0.1:8000>

http://localhost:8000/にブラウザでアクセスするとLaravelの画面が表示されました。
f:id:ponsuke_tarou:20190219230855p:plain

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

www.atmarkit.co.jp

f:id:ponsuke_tarou:20190219234237j:plain
思い出の一枚

サービスマネジメントシステムの規格はJIS Q 20000です。

前回の勉強内容

ponsuke-tarou.hatenablog.com

今回の勉強内容 : JIS Q 20000って何?

勉強のきっかけになった問題

ITサービスマネジメントの情報セキュリティ管理プロセスに対して,JIS Q 20000-1(サービスマネジメントシステム要求事項)が要求している事項はどれか。

ア. CMDBに記録されているCIの原本を,セキュリティが保たれた物理的又は電子的に格納庫で管理しなければならない。
イ. 潜在的な問題を低減させるために,予防処置をとらなければならない。
ウ. 変更要求が情報セキュリティ基本方針及び管理策に与える潜在的影響を評価しなければならない。
エ. 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。

https://www.sc-siken.com/kakomon/28_haru/am2_24.html

ITサービスマネジメントは、ITシステムによる利用者が必要とするサービス提供を管理することです。

  • 英語 : IT Service Management
  • 略称 : ITSM
  1. ITシステムを開発・運用することが業務の主目的になりがち・・・
    • 利用者視点が不足してしまい、ユーザーの満足度向上に課題になってしまう
  2. だから、利用者視点でITサービスの提供を考える <<< ITサービスマネジメント
    • ITシステムの開発・運用は、ITサービスを提供するための手段
    • ビジネス環境や情報技術の変化に合わせて改善を続けていく

ITサービスマネジメントにおける成功事例体系化した書籍群をITILといいます。

  • 英語 : Information Technology Infrastructure Library
サービスの企画・構築・運用というシステムライフサイクルに沿って、5つのカテゴリに分類されています。
  • サービス・ストラテジ
  • サービス・デザイン
  • サービス・トランジション
  • サービス・オペレーション
  • 継続的なサービス改善

http://104.215.0.91/wp-content/uploads/2016/10/itil.png
ITILとは – システム管理者なら押さえておきたい、ITIL用語解説 | ITサービス管理ソリューション「SmartStage|スマートステージ」

http://www.itsmf-japan.org/aboutus/images/itil-1-2017.png
ITILとは - itSMF Japanオフィシャルサイト

https://image.itmedia.co.jp/im/articles/0803/17/l_image02.jpg
ITIL V3はV2からどこが変わったか (1/3) - ITmedia エンタープライズ

ISO/IEC 20000は、ITサービスマネジメントシステムに関する国際規格です。

https://www.jqa.jp/service_list/management/service/iso20000/img/index_img01.gif
概要 | ISO/IEC 20000(ITサービス) | ISO認証 | 日本品質保証機構(JQA)

https://image.itmedia.co.jp/im/articles/0707/18/r4image01.jpg
IT管理のあるべき姿とISO 20000 (2/3) - ITmedia エンタープライズ

ISO/IEC 20000の日本版が、JIS Q 20000です。

JIS Q 20000は、2部構成になっています。

JIS Q 20000-1は、サービス提供者に対する要求事項が定義されています。
  • サービスマネジメントシステムの一般要求事項
    • 経営者の責任 / 他の関係者が運用するプロセスのガバナンス / 文書の運用管理 / 資源の運用管理 / SMS の確立及び改善
  • 新規サービス又はサービス変更の設計及び移行
    • 一般 / 新規サービス又はサービス変更の計画 / 新規サービス又はサービス変更の設計及び開発 / 新規サービス又はサービス変更の移行
  • サービス提供プロセス
    • サービスレベル管理 / サービスの報告 / サービス継続及び可用性管理 / サービスの予算業務及び会計業務 / 容量・能力管理
    • 情報セキュリティ管理 : 以下を特定するために変更要求を評価しなければならない
      • 新たな情報セキュリティリスク、又は変化した情報セキュリティリスク
      • 既存の情報セキュリティ基本方針及び管理策への潜在的影響
  • 関係プロセス
    • 事業関係管理 / 供給者管理
  • 解決プロセス
    • インシデント及びサービス要求管理
    • 問題管理 : 潜在的な問題を低減させるために,予防処置をとらなければならない。
  • 統合的制御プロセス
    • 構成管理 : CMDBに記録されているCIの原本を,物理的又は電子的にセキュリティが保たれた書庫で管理しなければならない。
    • 変更管理 : 変更要求の受入れについての意思決定では,リスク,事業利益及び技術的実現可能性を考慮しなければならない。
    • リリース及び展開管理
JIS Q 20000-2は、実践のための規範が定義されています。

f:id:ponsuke_tarou:20190219195334j:plain
思い出の一枚

次回の勉強内容

ponsuke-tarou.hatenablog.com

YAMLって何?

YAMLは、データ構造の書き方です。

  • 正式名称 : YAML Ain't a Markup Language(「Markup Language」と書いてあってもマークアップ言語ではありません)
  • 読み方 : ヤムル
  • 拡張子 : .yaml

JSONと同様にYAMLはキーと値を持つが、日付や時刻を始めとして、JSONよりも多くのデータ型を処理する。
https://www.oreilly.co.jp/books/images/picture978-4-87311-738-6.gif

e-words.jp

いろんな開発言語で使えます。

yaml.org

PythonにはPyYAMLというYAMLを扱うライブラリがあります。

PyYAML以外にもruamel.yamlやPySyck などがあります。

入門Python3のサンプルコードでYAMLに触れてみます。

https://www.oreilly.co.jp/books/images/picture978-4-87311-738-6.gif

これが、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.
値がスカラーです。

true, false, yes, no, on, offは、Pythonで読み込むと真偽値となります。
整数と文字列は、Pythonで読み込むとPythonの整数と文字列になります。

dates:
  birth: 1828-05-25
  death: 1906-03-31
details:
  bearded: true
  themes: [cheese, Canada]

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) $ 

思い出の一枚

f:id:ponsuke_tarou:20190131201017j:plain
偕楽園