VirtualBoxに作ったCentOSへMacからRAS鍵認証でログインできるようにする

MacVirtualBoxに作ったCentOS(ゲストOS)にRSA鍵認証許可を設定したので、Mac(ホストOS)からRSA鍵認証でログインできるようにします。
ponsuke-tarou.hatenablog.com

  • 目的 : Linux環境でSSHの鍵作成から設定まで勉強したい!
  • 環境

Macで公開鍵と秘密鍵を作成する

鍵を作成する

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/mana/.ssh/id_rsa):   <-------- 特に指定がなければEnter
Enter passphrase (empty for no passphrase):   <--------------- パスフレーズを入力
Enter same passphrase again:          <-------------- 確認用にもう1度パスフレーズを入力
Your identification has been saved in /Users/mana/.ssh/id_rsa.
Your public key has been saved in /Users/mana/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:+OKA8zTBRkOH7shmT36jxXelsEek9RnRI69Xy8RzzB8 mana@mananoMacBookAir.local
The key's randomart image is:
+---[RSA 2048]----+
|    ...     ..   |
|   ...      ..o  |
|   .o     o .o.+ |
|   o.. . + . o.E=|
| . o+ . S . +.o.*|
|  =ooo . + o. .o.|
| oo++ + + +  .   |
|   +o=oo o       |
|    oo..         |
+----[SHA256]-----+

$ ls -la .ssh/
total 24
drwx------   5 mana  staff   170 Aug  1 22:44 .
drwxr-xr-x+ 60 mana  staff  2040 Jul 26 23:24 ..
-rw-------   1 mana  staff  1766 Aug  1 22:44 id_rsa <--------------- 秘密鍵
-rw-r--r--   1 mana  staff   409 Aug  1 22:44 id_rsa.pub <------------ 公開鍵

$ chmod 600 .ssh/id_rsa.pub       <------------ 公開鍵に所有者のみ読み書き権限を付与する
$ ls -la .ssh/
total 24
drwx------   5 mana  staff   170 Aug  1 22:50 .
drwxr-xr-x+ 60 mana  staff  2040 Aug  1 22:50 ..
-rw-------   1 mana  staff  1766 Aug  1 22:44 id_rsa
-rw-------   1 mana  staff   409 Aug  1 22:44 id_rsa.pub

注意ポイント
パスフレーズが短いと↓怒られて↓鍵作成に失敗します。

Saving key "/Users/mana/.ssh/id_rsa" failed: passphrase is too short (minimum five characters)

鍵の強度(鍵長)を確認してみる

$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
2048 SHA256:+OKA8zTBRkOH7shmT36jxXelsEek9RnRI69Xy8RzzB8 mana@mananoMacBookAir.local (RSA)

qiita.com

秘密鍵の中身を見てみる

$ vi /root/.ssh/id_rsa
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,8B5E34DBBBC0801DDDC2A5A241775435

c2ACE4A1dOR55tGA7ZmIJ4dUDaVTL3uMyi3OiPlZdYDdnTKKrDpw9hHMILiauoCV
46Njy+DiE1iqNgKJHMKFLm1Flr3iFzehPm+u97qjFubZ5vS5wqYRjI8nSaKpE2X4
DSLUCUMBRIx5uOMuEWxLF4NrL50vgM35WQjAXgPxqZhku7P7pYUEPDekbMP6rlVr
W1kKRuXfIPNC18W40HUaUGnj+qjPm96wuj0TQSZww1k+aAOb+ngbLoXCELYg38WT
rCpAHLOky/BRHQhNDyUbOsV4QZuCMRlSsNEHGC9FP0/dn0azabuNWo40UNhSEmjM
C1zQh5zSP7LzGXo2DD1KfsKjAcfgRPidUD0GIjzqz/9mPDwXOorSOmXYwG9NXyAB
+dljYkcJDyfxaZHR7lJMnm2hegFRmaqlW+eIYPt9S4TgGJ0OM6X3Hbo+jtZQa3/u
DFauOVRj5wfXcSQxS+m9LIb+tuFghBOyAfdJbtFfO/dZDIDH6oB2gXQc6sklIQqU
nnciusaHoRfhI+SM29lLkErwmZ7TARxDkKAUO2qYIczoCJwgYM3PvhTTzaqUj0cY
7PMVYrO5Rlh7kEDBsRr0mjfCV27JQ3B6mLuLwPlqwuk8w/Nlah1MkV+NqZwc4H2W
EjTRls9gFm0jG9EotdfRy9EnRDoYLWWglhgZ0nIqDtfuF2nqFIxSV77/wQHY2cwc
Lx0rRUj6dUhTPEM4ROdVfD6di6WVaNpvTe65kAweRItBf0c66jqJrollKx91xQGF
T5XSLUD+iTOQu+wUM67wVjRVT7sjxYOm9IViBw2GpRD9E+9jEP+mw6FWL1adEony
Vi9Bz1MqxcxEbCQp7uNBjCZjGk3lGnI5nrscfdRJLfWnBGVg9bCABKP+OvNGdKNr
Wyi/TPvjatpBl83Z2b5Dpb/XAhq8IgaAwV973MsJPZzkc18+MMsbvU37RTj4UTL9
dl0rKvxgD6044328PZsEEX19tqQStWEN2JoWxZG//mbpMk+bAP7A9i1x/0cy3JOQ
t0tcSI6vLBjbGD/mVfX49Bl29h/e92p+fioxuNoqvm0K+GSJoJ9VMV6wweI0o2AY
4LMqOxXd/KSg0uixep0zY4QndxvT1uspTDb9JCPA6M5aIi7MMrt/l8amHNNhWco3
c3Tt1bbXhukhMECI5jEPI6SOXobHhr2m6gp78G7Kpcm+X7boAl+cLDtiHZSkeUIJ
CO1cZLsto7xzkqyu7cee5tTW69tBGjTklrGm6LhohV0myKq2I/VCmS7mMLzBNDHj
+5P1qpwhxv+zGgjQg3n+v1rIxilSaah+2Kp7MoGHgQZOD73xw/81KCP77/xoREOJ
QXuCsqk0uGAdTjef/OTUlMCZp1uJro0hrQW8S2pLgKS/t+6F/lzX0qM7HemaKTzi
rDxjhG2fR+hwcjokgw/8PtXjcYAn/CuD3/8to+0D8e+ZQrEwj5rLfSwKk7QmsVmQ
af6R+5iWHVjfLPhtnjyEi1rVyvplheTV7TPqUEx6x3Bt74fYIW9uKttNxO/BiVmE
28GkLxdacwcGRtqDKIgHnBvZz9Z8TRyis66mnd/onZq7QE8gzJXAqtPJVGBpPGsK
-----END RSA PRIVATE KEY-----

公開鍵の中身を見てみる

# vi /root/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCunPJl+yHM3LWrufikAFXYMlTaLt7azQ8ciPY8YHKxTXHQtunkFkfazDFJ/8GpU3W9vgNAP2n8XBs41NhjlAl6bi6Ouncs8tJOdNrCOAftX+R2KRI5/S3LuE3wGo411yGNn0MXOl5PFCJLLyRFZG4roD7J6f+hl6Jett8TLIyE1TsFrdVAtzPf0nvs7XHnNc2YU+kK5F0MmPpGpFv5k2mqle8VpxrH0MOu714e8sr7yxBbQpMGmqvJ8Lye/i2P0DSuamBTTMKsw6HUwh9yvKTB7IIKlqYuPJqtZ1otEMiGQOh1tGSKO1x7xHJqcSQ++qaG4F75s9ddWW2AzFMdtLel mana@mananoMacBookAir.local

CentOSに公開鍵を配置する

CentOSにログインする

$ ssh mana@192.168.0.6

鍵の設定用ディレクトリを作成する

# mkdir .ssh
# chmod 700 .ssh/ <--------- 所有者に読み書き実行権限付与
# chown -R mana:mana .ssh/ <---------- ディレクトリと中身の所有者変更
# ls -la
<省略>
drwx------. 2 mana mana    6  8月  1 21:50 .ssh
<省略>

Linuxコマンド集 - 【 chmod 】 ファイルやディレクトリのアクセス権を変更する:ITpro
Linuxコマンド集 - 【 chown 】 ファイルやディレクトリの所有者を変更する:ITpro

CentOSからログアウトする

$ logout
Connection to 192.168.0.6 closed.

SCPで公開鍵をMacからCentOSへ配置する

$ scp .ssh/id_rsa.pub mana@192.168.0.6:~/.ssh/authorized_keys
mana@192.168.0.6's password: 
id_rsa.pub                                                              100%  409   311.1KB/s   00:00 

webkaru.net

MacからCentOSへRAS鍵認証で接続する

接続方法はパスワード認証と同じですが、入力するのがパスワードではなく鍵のパスフレーズとなります。

$ ssh mana@192.168.0.6
Enter passphrase for key '/Users/mana/.ssh/id_rsa':  <------------- 鍵作成時に入力したパスフレーズを入力
Last login: Tue Aug  1 23:13:51 2017 from 192.168.0.7

クロスサイトスクリプティングの脅威を学ぶ。

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

クロスサイトスクリプティングの手口に該当するものはどれか。

  1. 攻撃者が,スクリプトを用いてWebサイトのOSコマンドを呼び出し,任意のファイルの読出しや変更・削除などの不正操作をする。
  2. 攻撃者が,スクリプトを用いて特定のPCへ大量に接続要求を送り出し,通信機能を停止させる。
  3. 攻撃者が用意したスクリプトでWebサイトのサービスポートに順次アクセスし,各ポートに対応するサービスに存在するセキュリティ上の弱点を探し出す。
  4. 攻撃者が用意したスクリプトを,閲覧者のWebブラウザを介して脆弱なWebサイトに送り込み,閲覧者のWebブラウザ上でスクリプトを実行させる。

平成27年秋期問36 クロスサイトスクリプティング|応用情報技術者試験.com

クロスサイトスクリプティング(CSS / XSS)とは、エコーバックするサイトの脆弱性を使って悪いスクリプトを閲覧者に送信します。

ウェブページの部分をユーザからの入力をそのままエコーバック(オウム返し)することによって生成しているアプリケーションのセキュリティ上の不備を利用して、サイト間を横断して悪意のあるスクリプトを注入する攻撃のことをいう。また経緯上、それを許してしまう脆弱性についても、このように呼ばれている。
クロスサイトスクリプティング|ITパスポート試験ドットコム

https://thinkit.co.jp/images/tech/7/1/3.gif
thinkit.co.jp

  • 例えば・・・
    • Webアプリケーションに用意された入力フィールドに,悪意のあるJavaScriptコードを含んだデータを入力する。
    • Webページに,ユーザの入力データをそのまま表示するフォーム又は処理があるとき,第三者が悪意あるスクリプトを埋め込むことでクッキーなどのデータを盗み出す。

電子掲示板のように、閲覧者から送信されたデータをコンテンツの一部として他の閲覧者に見せるようなプログラムがあるWebサイトで生じる脆弱性および攻撃手法で、攻撃者が外部のサイトに用意した悪意のあるスクリプトをターゲットのサイトに注入して閲覧者に送信する

(省略)

攻撃者はターゲットとなる脆弱なサイトへのリンクを設置した罠サイトを設け、閲覧者がリンクをクリックするよう仕向ける。その際、リンクのURLのパラメータ部分にスクリプト(JavaScriptコード)やHTMLタグの断片を埋め込み、閲覧者が脆弱なサイトを開くとページ内に自動的にそれらの悪質なスクリプトが埋め込まれ、即座に閲覧者のWebブラウザで実行される。
e-words.jp

エコーバックとは、送信した文字をそのまま返信してくる機能です。

e-words.jp

セキュリティ対策は、入出力をエスケープすることです。

  • Webアプリケーションがクライアントに入力データを表示する場合、データ内の特殊文字を無効にする処理を行う。
  • HTMLのマークアップ言語で、特定の意味を持つ文字をエスケープする
  • JavaScript特殊文字エスケープさせる
  • HTML 要素の属性は""(ダブルクオーテーション ) で囲む
  • CGIが受け取ったパラメータは、タグなどは無効化する
  • HTTP レスポンスヘッダーに文字コードを指定する
  • 出力する全ての要素に対してエスケープ処理を行う
  • URL は「http : //」か「https : //」で始まるもののみ出力する
  • 要素の内容を動的に生成しない

心の隙間に攻撃するソーシャルエンジニアリングとフィッシング

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

電子的な方法を用いないで、緊急事態を装って組織内部の人間からパスワードや機密情報のありかを不正に聞き出して入手する行為は,どれに分類されるか。

ア. ソーシャルエンジニアリング
イ. トロイの木馬
ウ. パスワードクラック
エ. 踏み台攻撃
平成17年春期問75 ソーシャルエンジニアリング|応用情報技術者試験.com

http://warau-new.jp/chara/images/chara_pose_moguro4.png
warau-new.jp

ソーシャル・エンジニアリングとは、心の隙間やうっかりミスにつけ込んで情報を盗むことです。

ソーシャル・ワークともいいます。

技術的な方法ではなく人の心理的な弱みに付け込んで、パスワードなどの秘密情報を不正に取得する方法の総称。
ソーシャルエンジニアリング|ITパスポート試験ドットコム

  • 例えば・・・
    • パスワードを入力するところを後ろから盗み見る
    • オフィスから出る書類のごみをあさって手がかりとなる個人情報の記されたメモを探し出す
    • ネットワークの利用者や顧客になりすまして電話で管理者にパスワードの変更を依頼して新しいパスワードを聞き出す
    • 電話に出た子どもに対して、両親に関する個人情報を聞き出す
    • 緊急事態を装って組織内部の人間からパスワードや機密情報を 入手する
    • システム管理者などを装い,利用者に問い合わせてパスワードを取得する。
標的型攻撃メールといって、件名や本文にターゲットの業務に関係がありそうな内容を書いてメールするものもあるのです。

http://www.soumu.go.jp/main_sosiki/joho_tsusin/security/business/staff/img/ill05_01.jpg

標的型攻撃への対策|社員・職員全般の情報セキュリティ対策|企業・組織の対策|国民のための情報セキュリティサイト

フィッシング(phishing)とは、フィッシングサイトへのリンクやURLを嘘メールに書いてアクセスさせる手法です。

ちまたでよく言う「フィッシング詐欺」です。
メールで個人情報を確認されたら要注意です。URL先では銀行のホームページに表示されているメニューから操作を始めたりして安易な入力はさけなきゃだめです。

金融機関 (銀行やクレジットカード会社) などを装った電子メールを送り、住所、氏名、銀行口座番号、クレジットカード番号などの個人情報を詐取する行為です。電子メールのリンクから偽サイト (フィッシングサイト) に誘導し、そこで個人情報を入力させる手口が一般的に使われています。
www.antiphishing.jp

http://www.jabank.org/attention/phishing/images/img_01.gif
www.jabank.org

  • 例えば・・・
    • 偽のホームページにアクセスさせるために,金融機関などを装い無差別に送信される。
    • "本人情報の再確認が必要なので入力してください"という電子メールで示されたURLにアクセスし,個人情報を入力したところ,詐取された。
    • 電子メールを発信して受信者を誘導し,実在する会社などを装った偽の Web サイトにアクセスさせ,個人情報をだまし取る。
    • 電子メールを介して偽のWebサイトに誘導し,個人情報を盗み出す。

大切なセキュリティ対策の方針について学びます。

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

JIS Q 27001では,情報セキュリティは三つの特性を維持するものとして特徴付けられている。それらのうちの二つは機密性と完全性である。残りの一つはどれか。

ア. 安全性
イ. 可用性
ウ. 効率性
エ. 保守性
平成24年春期問42 情報セキュリティの3要素|応用情報技術者試験.com

セキュリティ対策の方針は1つではありません。

情報セキュリティポリシーとは、どんな脅威からどんなふうにシステムを守るか決めた方針です。

情報セキュリティポリシーの策定
(1)組織・体制を確立
(2)基本方針を策定
(3)守るべき情報資産を把握、分類
(4)その情報資産のリスクアセスメントを行い、それにより自身の情報セキュリティにおける脅威と脆弱性とリスクを見極め
(5)それに応じた導入対策(管理策)を取捨選択
(6)対策基準を策定
(7)対策基準の周知徹底
(8)実施手順を策定
www.ipa.go.jp

情報セキュリティとは、機密性・完全性・可用性を維持して改善し続けることです。

組織が保護すべき情報資産について機密性・完全性・可用性(CIA)をバランスよく維持し改善すること。

  • 機密性(Confidentiality):アクセスを認可された者だけが情報に確実にアクセスできること
  • 完全性(Integrity):情報資産が完全な状態で保存され、内容が正確であること
  • 可用性(Availability):情報資産が必要になったとき、利用できる状態にあること

www.dqs-japan.jp

ISMSとは、技術対策だけではなく組織としてセキュリティレベル・プラン・資源配分を決めてシステムを運用していくことです。

Information Security Management Systemの略で、日本語では情報セキュリティマネジメントシステムと言います。

ISMSとは、個別の問題毎の技術対策の他に、組織のマネジメントとして、自らのリスクアセスメントにより必要なセキュリティレベルを決め、プランを持ち、資源を配分して、システムを運用することである。
情報セキュリティマネジメントシステム(ISMS)とは

リスクアセスメントとは、リスクを洗い出して撲滅したり低減させていくことです。

IT世界だけのことではありません。

リスクアセスメントは、職場の潜在的な危険性又は有害性を見つけ出し、これを除去、低減するため手法です。
中災防:リスクアセスメントとは なぜリスクアセスメントが必要か

www.kensaibou.or.jp

anzeninfo.mhlw.go.jp

ISMS認証基準には、実施状況の確認や見直しについても定められています。

■第3 ISMS の要求事項
(2)マネジメント枠組みの確立
 各項目について、定期的もしくは必要に応じて見直しすること。
(3)管理策の実施
 管理策を講ずるために採用された手続きについて、第 4 10(2)に従いその有効性を確認すること。
(5)文書管理
 (ア) ISMS 文書の利用者が文書を容易に利用することができる
 (イ) ISMS文書の定期的な見直しを行い、情報セキュリティポリシーに対する準拠性を維持しながら必要に応じて改訂する
 (エ) ISMSを運用するために必要なすべての事業所等において ISMS文書が閲覧可能である
■第4 詳細管理策
(2)セキュリティポリシー遵守状況の確認
 ① すべての手続きが情報セキュリティポリシーに準拠して実行されていることを定期的に見直すこと。
 ② 情報システムが情報セキュリティポリシー及び関連する対策基準や手順書等に準拠していることを定期的に確認すること。

https://isms.jp/doc/ismsreq08.pdf

ISMSの基になっている規格は、国際版がISO/IEC 17799で日本版はJIS X5080です。

これらは異なる2つの基準ではなく、英国規格である「BS7799」という規格を基に策定されており、ISO化された(国際基準化された)ものがISO/IEC17799である。そしてISO/IEC17799が日本語に翻訳され、日本工業規格(JIS化)として策定されたものが、JIS X5080である。
情報セキュリティマネジメントシステム基礎講座(1):ISMSの基盤となるISO/IEC 17799とJIS X5080 - @IT

JIS Q 27002とは、企業などの組織における情報セキュリティマネジメントシステムの仕様を定めた規格です。

国際規格ではISO/IEC 27002になります。
JIS Q 27002において対象としている脅威は、悪い人々からの攻撃だけではありません。

住環境を共有する者(例えば,家族,友人)による,情報又は資源への認可されていないアクセスの脅威

(省略)
潜在的な物理的及び環境的脅威[例えば,盗難,火災,爆発,ばい(煤)煙,水(又は給水の不具合)

(省略)

システムセキュリティ又はサービスに脅威をもたらすおそれのある,潜在的なあい(隘)路(bottlenecks)及び主要な要員への依存度合いを特定し,回避するために,管理者は,この情報を用いることが望ましく,また,適切な処置を立案することが望ましい。
JIS Q 27002:2014 情報技術−セキュリティ技術−情報セキュリティ管理策の実践のための規範

怖い人達から守れるか確認するペネトレーションテスト

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

ペネトレーションテストの目的はどれか。

  1. 暗号化で使用している暗号方式と鍵長が,設計仕様と一致することを確認する。
  2. 対象プログラムの入力に対する出力結果が,出力仕様と一致することを確認する。
  3. ファイアウォールが単位時間当たりに処理できるセッション数を確認する。
  4. ファイアウォールや公開サーバに対して侵入できないことを確認する。

平成26年春期問42 ペネトレーションテストの目的|応用情報技術者試験.com

ペネトレーションテストとは、対象システムへ侵入してみるテスト技法です。

英語では、penetration test です。侵入テストとか侵入実験とも言います。
penetrationは和訳すると「侵入、進出」になります。
実際にネットワークの外部から内部へ侵入してみるテストで、ファイアウォール部分なんかのテストに使います。

通信ネットワークで外部と接続されたコンピュータシステムの安全性を調査するテスト手法の一つで、既に知られている手法を用いて実際に侵入や攻撃を試みる方式。
e-words.jp

目的は、テスト対象に侵入できないことを確認することです。

ネットワークに接続された情報システムは、外部からの攻撃にさらされる可能性があるので、対策をします。
例えば・・・

  • セキュリティ用のソフトなどの導入
  • ファイアーウォールの導入

とはいえ・・・

  • 設定が十分じゃないかも
  • 新たな脆弱性をついた攻撃手法が開発されるかも

そこで、ペネトレーションテストを実施して

  • システムが攻撃に対して安全かな?
  • 攻撃を受けた場合にどこまでセキュリティツールは耐えてくれるかな?
  • 侵入されたらそこを踏み台にして他のネットワークを攻撃しないかな?

とかとか不安なことを観点にテストします。

侵入テストでは、セキュリティ強化を目指す管理者側が敢えてセキュリティホールの探査を攻撃を試みる。事前にあらゆる方法の攻撃を仕掛けてみることによって、セキュリティ上の問題を早期に発見し、対策を講じることができる。
www.sophia-it.com

近年インターネットの普及が目覚ましく、新たな技術がばりばり進出し・・・便利 VS 危険な状態です。

会社でもセキュリティのお話はよく出てきます。
labs.opentone.co.jp
labs.opentone.co.jp
labs.opentone.co.jp
labs.opentone.co.jp
labs.opentone.co.jp

造ったら使う前にちゃんとセキュリティの脆弱性をチェックしなきゃならない世の中です。

エンディアンは複数バイトのデータを並べる方法です。

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

16進数 ABCD1234 をリトルエンディアンで4バイトのメモリに配置したものはどれか。ここで, 0~+3はバイトアドレスのオフセット値である。

ア. http://www.ap-siken.com/kakomon/29_haru/img/21a.gif
イ. http://www.ap-siken.com/kakomon/29_haru/img/21i.gif
ウ. http://www.ap-siken.com/kakomon/29_haru/img/21u.gif
エ. http://www.ap-siken.com/kakomon/29_haru/img/21e.gif
平成21年秋期問24 リトルエンディアンで配置したもの|応用情報技術者試験.com

エンディアンとは、メモリにデータを送る時のデータの並べ方です。

バイトオーダーとも言います。
コンピュータでデータをメモリに読み書きしたり、ディスクに読み書きするときには、1バイトを最小単位にして行います。
エンディアンでは4バイト単位で管理してメモリにデータを送ります。

エンディアンとは、複数のバイト(多バイト、マルチバイト)で構成されるデータを記録・伝送する際に、どのような順番で各バイトを記録・伝送するかを表す順序のこと。
e-words.jp

トルエンディアンは、4バイトにデータを後ろから順に格納していく方法です。

例えば・・・ 16進数 : ABCD1234(10101011 11001101 00010010 00110100) をトルエンディアンで4バイトに格納すると

  • 1バイト目 : 34(00110100)
  • 2バイト目 : 12(00010010)
  • 3バイト目 : CD(11001101)
  • 4バイト目 : AB(10101011)

となります。
※. ()内は2進数です。

https://upload.wikimedia.org/wikipedia/commons/thumb/3/3c/Little-Endian-ja.svg/280px-Little-Endian-ja.svg.png
エンディアン - Wikipedia

ビッグエンディアンは、4バイトにデータを前から順に格納していく方法です。

例えば・・・ 16進数 : ABCD1234(10101011 11001101 00010010 00110100) をビッグエンディアンで4バイトに格納すると

  • 1バイト目 : AB(10101011)
  • 2バイト目 : CD(11001101)
  • 3バイト目 : 12(00010010)
  • 4バイト目 : 34(00110100)

となります。
※. ()内は2進数です。

https://upload.wikimedia.org/wikipedia/commons/thumb/7/75/Big-Endian-ja.svg/280px-Big-Endian-ja.svg.png
エンディアン - Wikipedia

どのエンディアンが使われるかはCPUによって決まります。

f:id:ponsuke_tarou:20171009204140p:plain
Endian(エンディアン)ってなに? | 学校では教えてくれないこと | [技術コラム集]組込みの門 | ユークエスト株式会社

バイエンディアンは、トルエンディアンビッグエンディアンを切り替えられる方法だそうです。

実際にエンディアンを見てみる

任意の16進数をトルエンディアンビッグエンディアンに変換する方法

こちらのサイトでカンタンに変換してくれます。

web.save-editor.com

自分のパソコンのエンディアンを確認する方法

Linuxのodコマンドでファイルのマジックナンバーを見ることで確認できます。
OSがmacOS SierraでプロセッサがIntel Core i7(x86)のパソコンに置いた拡張子.pngのファイルを見てみます。
.pngマジックナンバーは、16進数で「89 50 4E 47」です。

$ od -t x -A x /Users/mana/Desktop/ThisIsPingFile.png | head -1
0000000          474e5089        0a1a0a0d        0d000000        52444849

「474e5089」となっていることからトルエンディアンであることがわかります。

【 od 】 バイナリ・ファイルの内容を閲覧す

  • オプション
    • -A 表示するオフセットの基数を指定する
    • -t 表示のタイプを指定する
  • 表示タイプ
    • x 16 進数

Linuxコマンド集 - 【 od 】 バイナリ・ファイルの内容を閲覧する:ITpro

【 head 】 ファイルの先頭部分を表示する

  • オプション
    • -n ファイルの先頭からN行を表示する

Linuxコマンド集 - 【 head 】 ファイルの先頭部分を表示する:ITpro

マジックナンバー (magic number)とは
ハードコーディングされた(ソースコードの中に直接埋め込まれた)何らかの意味を持つ値のこと
http://wa3.i-3-i.info/word12868.html

qiita.com

qiita.com

CPUに役立っているレジスタの種類を知る

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

CPUのスタックポインタが示すものはどれか。

ア. サブルーチン呼出し時に,戻り先アドレス及びレジスタの内容を
  格納するメモリのアドレス
イ. 次に読み出す機械語命令が格納されているアドレス
ウ. メモリから読み出された機械語命令
エ. 割込みの許可状態,及び条件分岐の判断に必要な演算結果の状態
平成24年秋期問10 スタックポインタが示すもの|応用情報技術者試験.com

CPUとは、パソコンの脳みそです。

省略しないと、Central Processing Unitです。
日本語で言うと、中央演算装置です。
マイクロプロセッサに半導体チップとして入っていて、計算処理なんかをしてくれるパソコンの脳みそです。

CPUの種類はパソコンで見るとこんな感じで表示されています。
f:id:ponsuke_tarou:20171001191331p:plain

マイクロプロセッサの見た目はこんな感じ。

https://shop-media.intel.com/api/v2/helperservice/getimage?url=http://images.icecat.biz/img/gallery/23221218_49.jpg&height=550&width=550
www.intel.com

レジスタとは、CPUが計算する時に使う記憶装置です。

CPUに入っている記憶装置のことです。計算に使うデータや計算結果、次にやることの情報などCPUのためになることを覚えています。
CPUのために速攻でデータを授受してくれまが、あんまりたくさん覚えることができません。なので、用途に応じて担当を決めています。

http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/zu03.jpg
itpro.nikkeibp.co.jp

プログラムカウンタは、次にやることが書いてあるメモリの場所を記憶するレジスタです。

略してPCです。プログラムレジスタ(PR)とか命令ポインタ(IP)とも言うらしいです。

CPU内にあるアドレス(番地)を収める場所で、そのCPUが次に実行する命令が置かれている番地が書かれています。ある番地の命令を実行した後、次はどこの番地にある命令を実行したらよいのか、その答えを示しているのがプログラムカウンタです。
https://www.renesas.com/ja-jp/media/support/technical-resources/engineer-school/mcu-programming-peripherals-06/img_01.jpg
www.renesas.com

スタックポインタは、次に使えるメモリにあるスタックの番地を記憶するレジスタです。

OSがプログラムをロードすると,メモリ上に「スタック」と呼ばれるデータ領域が割り当てられる。アセンブラでは,主に汎用レジスタの値を一時的に退避する目的でスタックが使われる。スタックの最上段のアドレスを保持するのがSPだ
http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/zu05.jpg
itpro.nikkeibp.co.jp

そもそもスタックとは、メモリ上にある一時的な置き場です。

コンピュータで用いられる基本的なデータ構造の1つで、データを後入れ先出し(LIFO: Last In First Out; FILO: First In Last Out)の構造で保持するものである。
https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/Stack-sv.png/200px-Stack-sv.png
スタック - Wikipedia

割り込み要求が発生した場合、割り込みが発生する直前まで実行していたプログラムのフラグやPCの値を一時的に退避する場所
CPUの全体構成:スタックとスタックポインタ | 東芝 半導体&ストレージ製品

メモリ上の領域の一つであり注3,プログラム実行時の作業領域として使用します.スタック領域は,コード領域やデータ領域,ヒープ領域と同じように,メモリ上に領域を排他的に(ほかの領域とは重なり合わないように)確保しています.
http://www.kumikomi.net/archives/2008/07/15stack/zu04_01.gif
www.kumikomi.net

命令レジスタは、実行中の処理を記憶するレジスタです。

インストラクションレジスタ(IR)とも言うらしいです。
プログラムカウンタから次にやることが書いてあるメモリの場所を取得して、やることをメモリから読み出して記憶します。

主記憶から読み出された命令が格納される。この内容が命令デコーダ(命令解読器)で解読される。
http://ofmlsty.zashiki.com/magenju/terakoya/2syu_p/img/CPU_kihon.GIF
コンピュータの動作原理|コンピュータの仕組み|第二種 午前 まるごと要点|寺子屋|魔幻樹

取り出した命令を一時的に記憶しておくレジスタ。IRなどとも呼ばれる。
http://userdisk.webry.biglobe.ne.jp/013/235/62/N000/000/000/ALU.JPG
s.webry.info

メモリからやることを読み出すことをフェッチと言います。
メモリからフェッチしたやることを解析することをデコードと言います。

ステータスレジスタは、計算処理中に桁あふれを起こしたとか計算結果が0になったとか処理の状態を記憶するスレジスタです。

フラグレジスタとも言うらしいです。
決まったビット数の塊で、割込みOKだよとかエラーになったよとか計算結果がこうなったよとかをビットの値を変更することで記憶します。

演算,比較,およびデータの読み書きを行った結果が,自動的に設定される。
http://itpro.nikkeibp.co.jp/article/COLUMN/20070404/267385/zu06.jpg
itpro.nikkeibp.co.jp

CPUが演算命令を実行すると,指定されたデータ(汎用レジスタやメモリに置かれる場合が多い)をALUに送って演算を行い,結果を指定された記憶場所(汎用レジスタやメモリ)に保存します.このとき,演算結果が持つ特徴を,フラグ・レジスタ(またはステータス・レジスタ)と呼ばれる特別なレジスタに書き込みます
http://www.kumikomi.net/archives/2009/11/ep57hwsw/ep57hwsw_f05b.jpg
www.kumikomi.net