学習忘備録

学習のアウトプットや感じた事を発信していきます

2022.04.12 Computer System 授業内容

この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。 [:contents]

Computer System

基本情報技術者試験ドットコム https://www.fe-siken.com/ITパスポート試験ドットコム https://www.itpassportsiken.com/

基本情報合格教本

  • 勉強法
    • こういう勉強法もあり
      • 試験はこう出る
      • 出題分析
        • を攻める
    • 参照ページを見ながら勉強する方法がおすすめ
    • 計算が苦手の場合
      • 501p~ 計算問題の実践攻略
    • インプットとアウトプットのバランスが大事
  • 章末まとめ問題
    • 電子媒体は最新じゃないのでドットコムサイトで補強したほうが良い
    • 解説もドットコムのほうが優しい
  • 苦手分野を克服すれば合格の可能性は上がる!
    • 苦手分野にフォーカスして攻めていくのもあり

プログラミング的思考とは

  • 自分が意図する一連の活動を実現するためには、どんな動きの組合せが必要かを論理的に考える力のことです。 アルゴリズムは、組み立てた動きをなんらかの形にしたもの

アルゴリズム

  • 知識レベルで解けない設問もありますが、トータルでみると その時点の、その人の『考える力』が、どれぐらい養われているかを図るために出題される

データ構造とは

  • コンピュータ上にデータを格納する論理構造のこと
  • 様々なデータ構造が存在するが、用途に応じてどれを選ぶかが重要

アルゴリズムと流れ図

  • 流れ図

  • アルゴリズム

    • 処理の手順を表したもの
      • 順番に処理が行われるように1つ1つ必要な処理を記述していく
    • 論理が正しく行われているかしっかりと検証する必要がある
    • 表現には、流れ図や疑似言語などが使われる

フローチャートと疑似言語

  • フローチャート

    • ボックスと矢印を用いて表現する
    • プログラムの開始と終了の間に処理を記述し、流れを表現する
  • 疑似言語

    • 午後試験で使われる(ITパスポートで使われる)
      • 流れ
        • プログラムの名前を入れる
        • 型付け
        • 開始と終了は書かない
          • 下に行ったら終わり
    • テキストベースで処理の流れを表現する
    • 「・」を先頭に付ける
    • インデントを揃える(分岐があった場合を考える)
    • 試験用に作られた言語
    • 分岐の書き方
      • プログラム名称(駅)の下に条件式(条件式: 本屋に用事がある?)を入れる
      • 条件に合う場合(YES)の処理を下に書く
      • 真ん中に線を入れて、上下で分岐を分け、下側にNOの場合の処理を書く
      • YES, NOの処理の共通項目で分岐を合体させる
      • 最終的なゴールを記述する
  • フローチャートと疑似言語

    • 考え方は同じ
    • 表現の仕方が違う
      • フローチャート
        • 分かりやすい
        • 表現が長くなりやすい
      • 疑似言語
        • 分かりにくい(視覚的)
        • 字列だけ書くため短く表現できる
  • 順次処理 / 分岐処理

    • 順次処理
      • 順番に処理を行っていく
    • 分岐処理
      • 特定の条件に応じて処理を分岐していく
      • if文
        • 条件に応じて処理を行った結果、行わない処理がある場合もある

アルゴリズムの基本と流れ図

  • アルゴリズムの基本

    • 順次構造
      • 上から下へと順番に処理が行われる
    • 選択構造
      • 分岐
      • 条件によって次に行う処理を選択する
    • 繰り返し構造
      • 処理を何回か繰り返し行う
        • あるいは条件がクリアするまで繰り返す
      • 同じ処理を繰り返す
  • 流れ図

    • アルゴリズムを表現する、もっとも一般的な手法
      • 端子
        • 角を丸める
        • border radius
      • 処理
        • 長方形
      • 定義済み処理
        • 関数
        • ほかの場所で定義された処理
        • 長方形の左右に縦に1本線
      • 判断
        • 記述された条件によってかえる
        • 菱形
      • 入出力
        • ゆがんだ長方形
      • ループ端記号
        • 台形
          • 上向き台形でスタート、下向き台形でエンドとする
        • 入れ子のループ処理
          • 繰り返しの中に繰り返しがあるなどで分かりづらくなる、見づらくなるなどの理由で使われる
          • 例: ループ1の中にループ2がある時など

アルゴリズム

線形探索

ハッシュ探索

整列のアルゴリズム

整列とは?どうやって探す?

  • 並び替えしてあるほうが速いよね
    • どうやって並び替えするの?
      • PCのメモリ空間で処理を行う
      • データの入れ替え(交換)が必要
      • 例: AとBのデータを交換する場合、一時的に置く場所が必要
      • = 一時的な格納領域が必要 --> TMPと付けられる(慣習)
        • [A <--> B を交換する場合] + [□(データを交換する為の領域)]
        • メモリ空間では切り取りは出来ない、コピペのみ

データの管理とファイルシステム

ディレクトリ管理

  • ファイルの概念

  • パスの指定

    • Window -> \
    • UNIX系 -> /
      • 絶対パス
        • ルートから見た時のパスを指定する
      • 相対パス
        • カレントから見た時のパスを指定する
      • ../ or ..\
        • 1個上の階層を指定する
  • PCのファイルシステムの役割

    • アプリケーションプログラムが,ハードディスクやDVDなど記憶媒体の違いを意識しなくてもファイルにアクセスできるように,統一したインタフェースを提供する。

IoTとは?

  • アイオーティーと、発音
  • Internet of Things
  • 今までインターネットにつながらなかったモノがつながるようになる技術
    • 建築業
      • 人員不足と労働そのものの危険性にIoT技術が利活用される
    • 物流生産
    • 交通機関
      • 運行管理の取り組み
      • 不確定要素で運行が左右される為、ロケーションサービスが活用される
        • 運行状況を可視化して配信する
    • マーケティング
      • デジタルマーケティングの進化
      • ネット通販の拡充化、購買促進
      • ビッグデータが行きかうことになる
        • 購買行動の把握、対話データなどを利活用する
    • 医療や介護の産業現場でも活用される
      • 高齢者が介護を必要している現場
      • 人材不足 さらに介護職員の負担が増えることが予想される
        • バイタルセンサーを利用した見守りシステム
        • 専用機器を利用した排泄予知システム
        • 入浴介助を行うロボット、ケアプランの作成をするAI
      • 医療現場 地域医療の格差の社会問題
        • 遠隔の対面診療、画像診断
        • 聴診器を遠隔で聴ける状況に
        • 医療スタッフの慢性的な不足にテクノロジーの導入で解決を図る
        • 処方ミス、医療ミスなどの人的なミスをケア
        • 動物の健康を管理するIoT機器
          • 餌やり、健康管理など
    • 家庭におけるIoT化
  • 取り巻く環境の急激な変化
    • 人を介して実空間とサイバー空間を行き来する
    • 何もないところからモノを創造する難しさ

2022.04.11 Data Science 受業内容

この記事は職業訓練校の受業の内容の要点をまとめたものです。 職業訓練校を検討されている方が居たら参考にしてください。 [:contents]

データサイエンス

※大事 =SUMPRODUCT Excelを使って数学を理解する -> 数学を好きになろう

理解のゴール

  • データサイエンス, AIの概要を知る
  • 学習する上で大事なこと

覚えておこう

  • =SUMPRODUCT

    • Excelと言ったらsumproduct
    • CNN
      • CNNを理解することが重要
  • Operations Research

  • アランチューリング

  • appleのロゴの意味
    • アダムとイブの禁じられたリンゴにちなんで、人類の進歩を表しているとされる
    • チューリングとの関連は...?
  • コンピュータのノーベル賞

  • ☆☆☆ジョン・マッカシー

    • AIという用語
    • ユダヤ
    • Wisdomを教えている
      • 「生き方」
      • 前向きな捉え方
        • 試験前に財布が「落ちた」
          • 日本人はマイナスに考える
          • ユダヤ人は自分の代わりに落ちてくれたと考える
        • 子供の時からそういった考え方を養う
    • 「タルムード」
  • AI

    • 頭の中の脳細胞をまねたもの
    • 機械でさせると頭の中がわかるという逆のこともわかる
  • ニューロン
    • 目で見えない
    • ニューロンに該当するのがExcelのセル
      • 中身が見える!!
      • 中身が見えるから分かりやすい、どうやって流れているかを理解する
      • Pythonで作っても見えない、分からない
      • 大体分かればOKというのがゴール
  • 数学は大した事ないという捉え方をしよう

データサイエンスとは

具体的に理解したい 覚えるには確かなフレーズ、書き方がいい!! ネット情報で不確かな情報だと定着しない(理解できない) - データサイエンス 1. [みんなが既に知っているデータ] 1. 統計学の手法を用いる 1. 価値ある情報・データにする 2. [組織データによる最適化] 1. OR(Operations Research)手法を用いる 1. 価値ある情報・データにする 3. [Big Date, 画像データ, 音声データ他] 1. BigDateの代表例は画像データ 1. AI手法を用いる 1. 価値ある情報・データにする 4. 1~3は全て同じ大枠の中にあるもの 5. ベースになる考え方はあったが、ハードウェアが追いついていなかった 社会に溢れているデータから、有益・価値のある情報を引き出す学問 (データ分析手法を学ぶこと!)

  • さかなくん
    • 大学行ってないのに大学の客員教授
    • 好きな事を突き詰められるのが一番いい
  • 方丈記
    • 糸竹花月(しちくかげつ)
      • 琵琶、笛、自然
      • = hobby
      • 好きな事をやれ!
    • 数奇(趣味)の学問(Like)
    • 宮廷からお呼びがかかったのに関わらず、行かなかった
    • 天皇から「自分の好きな事に没頭していることが素晴らしい」と言われた
    • 好きな事をして、お金も貰えるのがベストだが、好きな事をしてそこそこのお金を貰えるというので良い、happy
    • 一生懸命やることでベストな方向に進める
      • 周りから応援される
      • 一生懸命は目に見える

Big Dataとは?

  • 大量(膨大)データとサーバー・データベース間の通信頻度が高速
    • Volume: 大量(膨大)
    • Velocity: 高速(速さ)
      • 速さの事だが、そもそも高速である必要がある
    • Variety: 多様性(画像,音声,など) --> 価値(Value)のある情報・データの提供
  • Big Dataとは?
    • 3つのVの特徴がある情報・データのこと

ExcelでAIの勉強が出来る

Excelでわかる機械学習 超入門 -AIのモデルとアルゴリズムがわかる - 畳み込みニューラルネットワークがわかる

AIとは

  • 従来のコンピュータ
    • 数値計算が得意
    • データとルールを入力し、コンピュータが答えを出力する
  • 従来のプログラミングでは困難なこと
    • 例: 画像を見て、グーチョキパーのどれかを判断すること
  • AI(機械学習)
    • データと答えをAIに入力するとルールが出力される
      • 逆転の発想
    • ただし、ルールを活用する
    • 予測してくれる

TensorFlow

  1. TensorFlowの使用
  2. kerasが数学部分をHelpしてくれる
  3. 配列x, y
  4. epochs = 回数を指定する
  5. データと答えを入れて計算させる 計算式から出される答えがAIによって確実な数値が出されるわけではない ※限りなく近い答えが出る(答え19だった18.9848のような数値)

プログラミングを初めてやる上で大事なこと

  • 環境構築でつまづかない
  • 0からやろうとしない
  • 最初は目に見える形で学び、分からないところを理解しようとしよう
  • 分からなくて良い
    • 分からない事をメモか何かで残しておく
  • 何回もやることが大事

本講義を受けて、まとめ

  • 何事も前向きに捉える
  • 好きな事をやれ!
  • 少し好きなら一生懸命やって好きを仕事に出来るようになれ!

入力処理とセキュリティ

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

入力処理とセキュリティ

アプリケーショの入り口、入力処理

対策
  1. 入力値検証はアプリケーション仕様に基づいて行う
  2. 文字エンコーディンの検証
  3. 制御文字を含む文字種の検証
  4. 文字数の検証
  5. 数値の最小値・最大値の検証
実施
  1. 設計段階で各パラメータの文字種および最大文字数、最小値・最大値を仕様として決める
  2. 設計段階で入力値検証の実装方針を決める
  3. 開発段階では仕様に従い入力値検証を実装する

PDFのFormCalcによるコンテンツハイジャック

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

PDFのFormCalcによるコンテンツハイジャック

PDFはFormCalcとよばれるスクリプト言語が仕様でき、PDFドキュメントにFormCalcスクリプトを埋め込むことが出来る。

Adobe Acrobat Readerに実装されたFormCalcにはURL関数という機能があり、HTTPリクエストを呼び出し、結果を受け取ることが出来る。

このFormCalcのURL関数を用いた仕掛けを組み込んだPDFファイルをアップロードすることにより、正規ユーザに成りすましを行う攻撃手段が考案されている

脆弱性が生まれる原因

問題としては、Adobe Acrobat Readerのセキュリティ上好ましくない仕様を悪用されることにある

従って、Acrobat Readerの仕様が見直される事が本筋だが、Webアプリケーション側で対応を取らざるを得ないのが現状である

対策

ブラウザのAcrobat ReaderプラグインでPDFデータを開いてしまうと、PDFファイル内のスクリプト実行を止める手段はWebサイト側には用意されていない。

このため、以下の両方を実施することが対策になる

  • PDFファイルはブラウザ内で開かずダウンロードを強制する
  • PDFをobject要素やembed要素では開けない仕組みを実装する
    • ファイルのダウンロードを強制するレスポンスヘッダを指定しても、罠のサイトでobject要素やembed要素を用いている場合、これらのレスポンスヘッダは無視され、FormCalcスクリプトが動くため
    • 単純な方法としては、ファイルダウンロードをPOSTリクエストに限定する

 

ファイルアップロードにまつわる問題

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

ファイルアップロードにまつわる問題

Webアプリケーションには、画像やPDFなどのファイルをアップロードして公開する機能(アップローダ)を備えるものがある。

利用者がファイルをアップロードする機能や、利用者がアップロードしたファイルを別の利用者がダウンロード出来る機能に発生しがちな脆弱性がある。

アップロードファイルによるサーバ側スクリプト実行

外部から送り込んだスクリプトが実行されると、以下のような影響がありえる

  • Webサーバ内のファイルの閲覧・改ざん・削除
  • 外部へのメールの送信
  • 別のサーバへの攻撃(踏み台と呼ぶ)
  • サーバ上での暗号通貨の採掘(マイニング)
脆弱性が生まれる原因

アップロードファイルをスクリプトとして実行可能な脆弱性が生まれる条件は、以下の両方に該当すること

  • アップロードしたファイルが公開ディレクトリに保存される
  • アップロード後のファイル名として、「.php / .asp / .aspx / .jsp 」などサーバスクリプトを示す拡張子が指定できる
対策

脆弱性が生まれる原因の2点のうち、どちらか一方の条件をつぶせば対策になるが、拡張子の制限だけでは対策抜けが生じる可能性がある

このため、ファイルを公開ディレクトリに保存させない方法が良い

アップロードされたファイルを公開ディレクトリに保存しない場合、このファイルはスクリプト経由でダウンロードする

アップロードファイルによるサーバ側スクリプト実行を防止するには、以下の2点の両方、あるいはいずれかを実施する

  • 利用者にアップロードされたファイルは公開ディレクトリに置かず、アプリケーション経由で閲覧させる
  • ファイルの拡張子をスクリプト実行の可能性のないものに制限する

ファイルダウンロードによるXSS

アップロードしたファイルを利用者がダウンロードする際に、ブラウザがファイルタイプを誤認する場合がある。

たとえば、アプリケーションがPDFファイルを想定しているにもかかわらず、PDFデータ中にHTMLタグが含まれていると、条件によってはブラウザがHTMLファイルとして認識してしまい、PDFファイルに埋め込まれたJavascriptを実行する場合がある

これを、ファイルダウンロードによるクロサイト・スクリプティング(XSS)と呼ぶ。

脆弱性が生まれる原因

Content-Typeの間違った指定が原因

Content-Typeの指定が間違っていると、ブラウザがコンテンツをHTMLと解釈し、コンテンツ中のJavaScriptが実行されてしまう可能性がある

対策

ファイルのアップロード時とダウンロード時に以下の対策を実施する

  • ファイルのアップロード時
    • 拡張子が許可されたものかをチェックする
  • ファイルのダウンロード時
    • Content-Typeを正しく設定する(必須)
      • PDF形式のContent-Typeを「application/pdf」と正しく設定すれば、脆弱性はなくなる
      • Content-Typeを正しく指定することは、全てのブラウザに必要な処理
    • レスポンスヘッダX-Content-Type-Options: nosniffを指定する(必須)
      • 元々IEのContent-Typeの解釈が仕様として曖昧なため、XSSが混入しやすい状況だった
        • この事からマイクロソフト社はX-Content-Type-Options: nosniffというレスポンスヘッダを実装した
      • 現在はIE以外のブラウザにも実装されており、セキュリティ強化に広く寄与するので、すべてのHTTPレスポンスに対して指定することが強く推奨される
      • そのためには、ApacheやnginxなどのWebサーバ側の設定が必要 
    • 必要に応じてContent-Dispositionヘッダを設定する
    • PDFを扱う場合は、「PDFのFormCalcによるコンテンツハイジャック」の対策を実施する(別途ページ参照)
その他の対策

上記までのXSS対策は、脆弱性を防止するための必要最低限のチェックのみのため、Webアプリケーションの仕様策定時に、以下のようなチェックを行うかどうか検討すると良い

  • ファイルサイズ以外の縦横サイズ、色数などのチェック
  • 画像として読み込めるかどうかのチェック
  • ウィルス・スキャン
  • コンテンツの内容のチェック
    • アダルトコンテンツ
    • 著作権を侵害するコンテンツ
    • 法令・公序良俗に反するコンテンツ
    • その他

OSコマンド呼び出しの際に発生する脆弱性

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

OSコマンド呼び出しの際に発生する脆弱性

Webアプリケーションの開発に用いる言語の多くはシェル経由でOSコマンドの実行が可能。シェル経由でOSコマンドを実行する場合や、開発に用いた機能が内部的にシェルを用いて実装されている場合、意図しないOSコマンドまで実行可能になる場合がある

この現象をOSコマンド・インジェクションと呼ぶ

OSコマンド・インジェクション

脆弱性が生まれる原因
  • シェル経由でOSコマンドを呼び出す際に、シェルのメタ文字がエスケープされていない場合
  • シェル機能を呼び出せる関数を使用している場合

OSコマンド・インジェクション脆弱性が生まれる条件は、以下の3つをすべて満たしている場合

  • シェルを呼び出す機能のある関数(system, openなど)を利用している
  • シェル呼び出しの機能のある関数にパラメータを渡している
  • パラメータ内に含まれるシェルのメタ文字をエスケープしていない
対策
  • OSコマンド呼び出しを使わない実装方法を選択する
    • 設計フェーズで対策方針を決定する
  • シェル呼び出し機能のある関数の利用を避ける
    • シェルを経由しない関数の使用
  • 外部から入力された文字列をコマンドラインのパラメータに渡さない
  • OSコマンドに渡すパラメータを安全な関数によりエスケープする
    • シェルのエスケープルールは複雑なので、自作ではなく安全なエスケープを行えるライブラリ関数を用いる
保険的対策
  • パラメータの検証
    • パラメータ文字列の文字種を制限することが推奨
    • 例えば、OSコマンドのパラメータにファイル名を渡している場合、ファイル名の要件を英数字に限定すれば攻撃できなくなる
  • アプリケーションの稼働する権限を最小限にする
    • これにより攻撃の被害を最小限にとどめられる
    • 外部からの攻撃の多くはWebshellと呼ばれる遠隔操作用のバックドアコマンドをドキュメントルートにダウンロードして設置する
    • ドキュメントルートにWebアプリケーションから書き込み権限がない状態にすれば、Webshell設置による攻撃は成功しない
  • WebサーバのOSやミドルウェアのパッチ適用
    • サーバ内部からOSの脆弱性をついた攻撃を受けた場合は最も被害大きくなる
    • 外部から攻撃を受けない脆弱性であっても、パッチ適用などの対処が推奨

ファイルアクセスにまつわる問題

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

ファイルアクセスにまつわる問題

Webアプリケーションは様々な形でファイルを使うが、そのファイルを取り扱う際に気をつけてなくてはいけない脆弱性がある

ディレクトリ・トラバーサル

外部からパラメータの形でサーバ上のファイル名を指定できるWebアプリケーションでは、ファイル名に対するチェックが不十分であるとアプリケーションの意図しないファイルに対して、閲覧や改ざん、削除が出来る場合がある

この脆弱性ディレクトリ・トラバーサルと呼ぶ

脆弱性が生まれる原因
  • ファイル名を外部から指定することができる
  • ファイル名として、絶対パス相対パスの形で異なるディレクトリを指定できる
  • 組み立てたファイル名に対するアクセスの可否をチェックしていない

「異なるディレクトリを指定することができる」ことに対する考慮が必要

上記の3条件を満たさないとディレクトリ・トラバーサル脆弱性にはならない

対策
  • 外部からファイル名を指定できる仕様を避ける
    • ファイル名を固定にする
    • ファイル名をセッション変数に保持する
    • ファイル名を直接指定するのではなく、番号などで間接的に指定する
  • ファイル名にディレクトリ名が含まれないようにする
    • ディレクトリを示す記号文字は、「/, \, :」などOSにより異なるので、OSによる違いを考慮したライブラリを用いるべき
  • ファイル名を英数字に限定する

最善策は、ファイル名を外部から指定しないこと

設計の段階で、外部からファイル名を渡さない仕様の検討が推奨

 

意図しないファイル公開

外部から閲覧されると困るファイルをWebサーバの公開ディレクトリに配置している場合、このファイルに対するURLが分かると秘密ファイルの閲覧が可能になってしまう

意図しないファイル公開による影響は

  • 重要情報の漏洩
脆弱性が生まれる原因

非公開のファイルを公開ディレクトリに置いた事で、意図しないファイル公開が起こる

  • 公開ディレクトリに置かれたファイルが外部から閲覧できる条件
    • ファイルが公開ディレクトリに置かれている
    • ファイルに対するURLを知る手段がある
    • ファイルに対するアクセス制限が掛かっていない
  • ファイルに対するURLを知る手段
    • ディレクトリ・リスティングが有効
    • ファイル名が日付やユーザ名、連番など類推可能
    • user.dat, data.txtなどのありがちな名前
    • エラーメッセージや、他の脆弱性によりファイルのパス名が分かる
    • 外部サイトからリンクされるなどして検索エンジンに登録される
対策

根本的対策は、非公開ファイルを公開ディレクトリに置かないこと

そのために、以下が推奨される

  • アプリケーションの設計時に、ファイルの安全な格納場所を決める
  • レンタルサーバを契約する場合は、非公開ディレクトリが利用出来ることを確認する
保険的対策

ディレクトリ・リスティングを無効にする