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

前回の勉強内容

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攻撃、スキャンベース攻撃等色々あります。

次回の勉強内容

勉強中・・・

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

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

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

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

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

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

ponsuke-tarou.hatenablog.com

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

f:id:ponsuke_tarou:20190411232733p:plain

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

  • 英語 : submission port
  • OP25Bを実施しているプロバイダの場合はTCP25番ポートを通してのメール送信が出来なくなるが、このサブミッションポートを利用することで送信が可能となります。

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でメールを安全に送るには (3/3):セキュリティプロトコルマスター(4) - @IT

STARTTLSは、TCPポート25番か582番を使います。

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

https://www.sendmagic.jp/wp-content/uploads/sm_starttls.png
STARTTLSに対応する | メール配信エンジンのSENDMAGIC

https://devcentral.f5.com/Portals/0/images/metapost/News-Articles/citizen_elah/2011/Oct/Windows-Live-Writer-iRuleologyTCPcollect-and-SMTP_87EF-starttls_flow_thumb.png
Advanced iRules: SMTP Start 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://wa3.i-3-i.info/img/data/5600/d005642-4.pnghttps://wa3.i-3-i.info/img/data/5600/d005642-5.png
https://wa3.i-3-i.info/img/data/5600/d005642-6.pnghttps://wa3.i-3-i.info/img/data/5600/d005642-7.png
バッファオーバーフロー攻撃とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

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
企業を脅かす「パスワードリスト攻撃」 拡大する不正ログインの特徴や影響、対策を解説 | サムライズ 業務改善コラム

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

  • 英語 : 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://wa3.i-3-i.info/img/data/6000/d006051-2.png
スキャベンジング (scavenging)とは|「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

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