Output Diary

勉強のアウトプットを毎日発信しています

【システム開発】BIツールとは

f:id:kina_kq:20210513082132p:plain

近年、情報収集が可能なデータは爆発的に増加してきており、

得られる情報を複雑になってきています。

今日はこれらのデータ達を上手に利用するツールやしくみについて解説します。

 

BI(Business Intelligence)ツール

 

BIツールは、

企業に蓄積された大量のデータを集めて分析し、可視化するツールのことです。

経営管理や売上のシュミレーションなどに活用され、近年導入する企業が増えています。

 

メリットとしては、

・レポート作成が短時間で出来ること

・膨大な情報の分析を素早く行えること

・専門家でなくてもデータ分析が可能なこと

が挙げられます。

 

データウェアハウス

 

ウェアハウスとは「倉庫」という意味です。

データウェアハウスは、業務でさまざまなデータを時系列で保管したものです。

DWHと略されることもあります。

 

データウェアハウスのデータはBIツールで利用されています。

 

データベースの特徴は、

・データベースではないこと

・データレイクではないこと

・データマートとではないこと

です。

 

データレイクとは、構造化データや非構造化データを格納する場所のことをいいます。

データマートとは、データウェアハウスの中から特定の目的に合わせた部分を取り出したもののことをいいます。データベース全体ではなく、データベースの一部を指しています。

 

データマイニング

 

マイニングとは「発掘」という意味です。

データマイニングとは、データウェアなどに蓄積された大量のデータを分析し、新しい情報を発掘することです。略してDMと呼ばれることもあります。

 

統計学パターン認識人工知能等のデータ解析の技法を大量のデータに適用することで、必要な知識を取り出す事ができます。

 

データマイニングの機能として、

・発生確率の予想

・データの分類

・関連性の抽出 

を行うことが出来ます。

 

参考

BIツール(ビジネスインテリジェンスツール)とは?基本と事例と知っておくべき留意点 – データのじかん

データウェアハウス(DWH)とは? メリット・特徴、具体例を紹介 - Talend

データマートとデータウェアハウスの違いとは?なぜデータウェアハウスが理想のデータベース形態と言われるのか? – データのじかん

データマイニング - Wikipedia

 

【システム開発】モジュールの分割

f:id:kina_kq:20210512082919j:plain

 

モジュールの分割とは、

コンピュータプログラムを設計する際に、

全体を何らか基準に従って、複数の部品(モジュール)に分割することをいいます。

 

モジュールは特定の機能や構造化を表すプログラムのまとまりであり、これらを組み合わせてプログラムの全体を設計していきます。

 

モジュールを分割することのメリット

 

モジュールを分割することのメリットは、

・作業が分担できる(複数人で並行してプログラミング作業を進められる)

・再利用が容易(共通する機能を部品として使い回すことができる)

・修正が一部で済む(欠陥のあるモジュールを修正するだけで、プログラムを改修できる)

といったことがあげられます。

 

ただなんでもかんでも分ければ良いというわけでもないので、

注意が必要です。

 

モジュールの分割技法

 

STS分割法

 

STS分割法では、

プログラムを「入力処理(源泉:Source)」、「変換処理(変換:Transform)」、「出力処理(吸収:Sink)」という3つのモジュール構造に分割します。

 

「データの流れ」に着目した技法で、

入力処理→変換処理→出力処理

と流れていきます。

 

入力処理では、プログラムのデータの入力や取得、読み込みなどを行うモジュール、

変換処理では、データの計算や加工、変換などを行うモジュール、

出力処理では、データの出力や表示、印刷、書き出しなどを行うモジュールに分割します。

 

トランザクション分割法

 

トランザクション分割法とは、

対象となるデータの種類と、そのデータに関連するプログラムを一連の処理(トランザクション)単位に分割する方法です。

 

共通機能分割法

 

共通機能分割法とは、

プログラムの中の共通機能をモジュールとして分割する方法です。

 

モジュールの独立性を測る尺度

 

モジュールの独立性を測る尺度として、

・モジュール強度

・モジュール結合度

があります。

 

モジュール強度

 

「強度」とは、分割された1つのモジュール内に、どんな要素が含まれており、どのように関連付いているかによって決まる指標です。どれだけ機能的に特化できているかを表しているものになります。強度が高いほど、「モジュールの独立性が高くて好ましい」となります。

f:id:kina_kq:20210512090701p:plain


モジュール結合度

 

他のモジュールとどのように結合するかを示す尺度です。

 

モジュールの結合度が弱いほど、

「モジュールの独立性が高くて好ましい」となります。

 

f:id:kina_kq:20210512091803p:plain

 

 

まとめ

 

モジュール強度は高いほど、「モジュールの独立性が高く好ましい」になりますが、

モジュール結合度は低いほど、「モジュールの独立性が高く好ましい」となります。

 

注意が必要ですね。 

            

 

参考

モジュール分割とは - IT用語辞典 e-Words

モジュール分割と独立性

キタミ式イラストIT塾 基本情報技術者 令和03年

【セキュリティ】暗号方式

f:id:kina_kq:20210511105117j:plain

 

情報の機密性、安全性を保つためには、暗号化と認証の導入は欠かせません。

今日は3つの暗号化の方式と特徴を紹介していきます。

 

そもそも暗号化って?

 

暗号化とは、

データを規則に従って変換し、第三者が解読できないようにすることです。

 

暗号化されたデータは、デタラメに文字列が並べられており、何が書いてあるか理解できないものになっています。

 

なぜ暗号化するかというと、暗号化されていない状態でデータを送信すると、

三者からデータを盗み見されたり、改ざんされてしまう可能性があるからです。

 

暗号化前のデータは、平文といい、

暗号化されたデータをもとに戻すことを復号と呼びます。

 

暗号化や複合は、暗号化アルゴリズムによって行われます。

 

共通鍵暗号方式

 

共通鍵暗号方式とは、

暗号化と同じ鍵(共通鍵)を使用する方式です。

 

共通鍵は第三者に知られないように秘密にするため、

秘密鍵暗号方式とも呼ばれます。

 

メリットとしては、暗号化と復号が高速に行える点で、

デメリットとしては、鍵が第三者に渡ってしまうと暗号が解読されてしまうという点になります。

 

鍵交換の際には、盗聴されないよう細心の注意を払う必要があります。

 

公開鍵暗号方式

 

公開鍵暗号方式とは、

暗号化と復号で異なる鍵を使用し、暗号化する鍵(公開鍵)を公開し、復号する鍵秘密鍵)を秘密にする方法です。

 

メリットとしては、鍵の入手や管理がしやすい点、安全性が高い点で、

デメリットとしては、暗号化と復号の処理が複雑なため処理に時間を要してしまう点です。共通鍵暗号化方式と比べて約1.000倍の時間がかかるといわれています。

 

ハイブリッド暗号方式

 

ハイブリット暗号方式は、

共通鍵暗号方式と公開鍵暗号方式のメリットを組み合わせたハイブリット型です。

共通鍵を安全に渡すために、鍵交換の際には公開鍵を使用して、実際のデータの暗号化には共通鍵を使用するというものです。

 

こうすることで、鍵を安全に配布することが出来、高速処理が可能になります。

 

〜流れ〜

1. 送信者が共通鍵を作成

2. 送信者が受信者の公開鍵で共通鍵を暗号化

3. 暗号化された共通鍵を送信

4. 受信者の秘密鍵で共通鍵を復号

5. 送信者が共通鍵で平文を暗号化

6. 受信者に暗号文を送信

7. 共通鍵で暗号文を復元

 

 

参考

共通鍵暗号と公開鍵暗号とはf:id:kina_kq:20210511111106j:plain

 

【Rails】バリデーション

f:id:kina_kq:20210510081539j:plain

バリデーションとは、

データベースに保存する前に保存する内容を検証する機能です。

 

バリデーションを定義することによって、フォームの入力必須の欄が入力されていなかったときに、フォームの送信を出来ないようにすることが出来ます。

 

バリデーションのトリガ

 

  • create

  • create!

  • save

  • save!

  • update

  • update!

 

検証データが保存されない場合

saveとupdateは、falseが、

createは、オブジェクト自身を返します。

 

メソッド名の最後に!をつけると、

保存されなかった場合には例外処理を返します。

 

バリデーションのスキップ

 

バリデーションのスキップは、バリデーションを行わずスキップします。

 

    • decrement!

    • decrement_counter

    • increment!

    • increment_counter

    • toggle!

    • touch

    • update_all

    • update_attribute

    • update_column

    • update_columns

    • update_counters

     

しかし、saveにvalidate: falseを引数として与えると、saveのバリデーションをスキップできてしまうようなので注意が必要です。

 

valid? とinvalid?

 

valid?メソッドを使って、バリデーションを手動でトリガすることもできます。

オブジェクトにエラーが無いときにはtrueが返され、そうでなければfalseが返されます。

 

バリデーションヘルパー

 

バリデーションヘルパーは共通のバリデーションルールを提供します。

バリデーションが失敗すると、オブジェクトのerrorsコレクションにエラーメッセージが追加され、そのメッセージは、バリデーションが行われる属性に関連付けられます。

 

❏  :onオプション

どのヘルパーでも使用できます。

バリデーション実行のタイミングを設定することができます。

:onオプションは:createまたは:updateのいずれかの値を取ります。

 

 ❏ :messageオプション

 

どのヘルパーでも使用できます。

バリデーション失敗時にerrorsコレクションに追加するメッセージを指定することができます。このオプションが無いときは、デフォルトのメッセージが表示されます。

 

❏ acceptance

 

フォームが送信されたときに、ユーザーインターフェイス上のチェックボックスがオンになっているかどうかを検証するメソッドです。

サービス利用条項への同意が必要は場合によく使われます。

 

❏ confirmation

 

このヘルパーは、2つのテキストフィールドで受け取る内容が完全に一致する場合に使われます。

メールアドレスやパスワードが完全に一致するかの確認フィールドで使われます。

属性の名前は、確認したい属性名に「_confirmation」を追加します。

 

❏ length

 

このヘルパーは、属性の値の長さを検証します。 

class Person < ApplicationRecord
  validates :name, length: { minimum: 2 }
  validates :bio, length: { maximum: 500 }
  validates :password, length: { in: 6..20 }
  validates :registration_number, length: { is: 6 }
end

 

値の大小から文字数の制限まで指定することができます。

 

❏ numericality

 

このヘルパーは、属性に数字のみが使われているかを検証します。

デフォルトでは整数または浮動小数点にマッチします。

整数のみにマッチさせたい場合、:only_integertrueにします。

 

❏ presence

 

このヘルパーは指定された属性が空でないかを検証します。

内部ではblank?メソッドを使っています。

 

class Person < ApplicationRecord
  validates :name, :login, :email, presence: true
end

 

参考

Active Record バリデーション - Railsガイド

【Rails】Railsのバリデーションの使い方をマスターしよう! | Pikawaka - ピカ1わかりやすいプログラミング用語サイト

アプリケーションの弱点をついた攻撃手法と対策 Part2

f:id:kina_kq:20210509180047j:plain

前回の記事で、

✅ 辞書攻撃

✅ 総当たり攻撃

✅ パスワードリスト攻撃

クロスサイトスクリプティングXSS

SQLインジェクション

 について調べました。

 

本日は、

✅ ドライブバイダウンロード

DNSキャッシュポイズニング

DoS(Denial of Service:サービス妨害)攻撃

DDoS攻撃(Distributed Dos:分散型DoS攻撃

水飲み場型攻撃

✅ やり取り型攻撃

✅ ゼロディ攻撃

について調べて行こうと思います!👀✨

 

ドライブバイダウンロード

 

ドライブバイダウンロードとは、

Webサイトに不正なソフトウェアを隠しておき、サイトの閲覧者がアクセスしただけでそれらをダウンロードさせ、感染させる攻撃のことです。

ユーザーの知らぬ間に、ダウンロードが実行されるため、感染していることに気づきにくいことが特徴です。

 

対策としては、

ウイルス対策ソフトを導入し、定義ファイルやOSを最新の状態に保つ必要があります。

 

DNSキャッシュポイズニング

 

DNSサーバーには、

IPアドレスドメイン名の対応表のコピーを持つキャッシュサーバーがあります。

攻撃者がキャッシュサーバーの中身を偽情報に置き換えると(=汚染されると)、悪意のあるサーバーに誘導され、そのサーバを使用したユーザーの機密情報を抜き出す攻撃です。

 

本来意図しない金融機関や商取引に似せた偽物のサイトに誘導され、ユーザー名やパスワードの情報が盗まれるといった出来事が発生しています。

 

対策としては

通信ポート番号をランダム化するソースポートランダマイゼーション が有効だとされています。

www.weblio.jp

 

 DoS(Denial of Service:サービス妨害)攻撃

 

DoS攻撃とは、

直訳すると、「サービス拒否攻撃」です。

これは、大量の通信を発生させてサーバーをダウンさせ、サービスを妨害する攻撃です。

対策は、

ネットワークの監視装置で通信量などを監視し、不正な通信を遮断します。

 

DDoS攻撃(Distributed Dos:分散型DoS攻撃

 

DDoS攻撃とは、

直訳すると、「分散型サービス拒否攻撃」という意味になります。

複数の端末からサーバーに一斉に通信を発生させ、ダウンさせてサービスを妨害する攻撃です。

 

この攻撃の厄介な所は、

不正に則った複数のコンピュータのIPを利用して攻撃が行われるので、

・攻撃元が次々と変わるため特定のIPをブロックすることが非常に難しい

・第三者のIPを使っているため、攻撃者の特定が難しい

といったことがとても厄介な点になります。

 

対策としては、

DoS攻撃と同様、ネットワークの監視装置で通信量などを監視し、不正な通信は遮断していく必要があります。

 

水飲み場型攻撃

f:id:kina_kq:20210509194315j:plain

 

水飲み場型攻撃とは、

ターゲットが訪れそうなWebサイトを改ざんし、ドライブバイダウンロード攻撃などを利用してマルウェアに感染させようとする標的型攻撃です。

 

水飲み場攻撃の名前の由来

水飲み場型攻撃は、英語ではwatering hole attackといい、野生動物などが水を飲みにやってくる水飲み場をさします。「たまり場型攻撃」と訳されることもあります。

Water hole🐎とは、

攻撃者を肉食動物、攻撃対象となる企業や組織のユーザーを草食動物に見立て、草食動物が集まる水飲み場のそばで、肉食動物が獲物を待ち伏せする様子になぞらえ、こう呼ばれるようになったといわれています。

 

対策は、

ウイルス対策ソフトを導入し、定義ファイルやOSを最新に保つことです。

侵入されないための対策はもちろんのこと、侵入された場合でも大切な情報を持ち出されないよう対策を取っておく必要があります。

 

やり取り型攻撃

 

やり取り型攻撃とは、

標的になった組織に対して、取引先や社内関係者になりすましてやりとりし、ウイルスを送りつけて機密情報を盗む攻撃です。

対策は添付ファイルの確認のときに社内のネットワークに接続されたコンピュータで作業を行わないことです。通常のネットワークとは隔離された試験環境を準備しておくことが大切です。

 

ゼロディ攻撃

 

ゼロディ攻撃とは、

開発者による修正プログラムが提供される日より前にその脆弱性を突く攻撃のことです。

対策を取られる日を1日目(ワンディ)と考え、それ以前に開始された攻撃という意味でゼロディ攻撃と呼ばれています。

 

ゼロディ攻撃の実例として、

2015年に「Adobe Flash Player」の脆弱性を突き、ゼロディ攻撃が起きた事例があります。

Flashコンテンツを読み込むと、その他のソフトウェアも強制的にダウンロードさせられるという被害が報告されました。

 

対策としては、常に最新のセキュリティ環境を保持するため、自動更新の設定を行ったり、こまめな確認が大切になってきます。

 

参考

脆弱性を悪用する「ドライブバイダウンロード」の仕組み・検知・対策

DNSサーバーへの「キャッシュポイズニング攻撃」対策について | 法人向けOCN

ソースポートランダマイゼーションとは何? Weblio辞書

DoS攻撃・DDoS攻撃の意味と対策方法をわかりやすく解説 | セキュリティ対策 | CyberSecurityTIMES

水飲み場型攻撃とは?被害を最小化するために知るべき攻撃手順と対策

やり取り型メール攻撃とは?方法や注意点、効果的な対策について徹底解説

ゼロデイ攻撃とはなにか?サイバー攻撃の特徴と対策方法 | DAiKO+PLUS(プラス)

アプリケーションの弱点をついた攻撃手法と対策 Part1

f:id:kina_kq:20210508080454p:plain

 

攻撃者はありとあらゆる手法を使って、攻撃を仕掛けてきます。

今日はそれらの攻撃の種類を飽きるまでまとめてみたいと思います。

 

辞書攻撃(Dictionary Attack)

 

辞書攻撃とは、

辞書にのっている単語を次々と入力してパスワードの割り出しや暗号の解読に使われる方法のことです。

対策としては、

・人名や意味のあるパスワードを用いないこと

・記号や数字をランダムに組み合わせることが大事です。

 個人的に、ワンパスワードを使ってパスワード管理することをおすすめします。

 

総当り(ブルーフォース)攻撃

 

総当り攻撃とは、

英数字の組み合わせを一つずつ入力し不正アクセスを試みる攻撃です。

ブルーフォースの意味は、日本語で「強引な」とは「力ずく」という意味にあたります。

 

「なんだそれは、面倒くさいではないか!」という感じですが、

多くの場合プログラムされたコンピュータが行っているみたいです。

 

独立行政法人情報勝利推進機構が2008年に行った試験によると、

 

f:id:kina_kq:20210508081954p:plain


なんと英字4文字の場合、3秒で解読されるみたいです。

恐ろしやーといった感じです。

このデータはなかなか古いので、現在のパソコンだともっと速度速そうですね、、。

 

ちなみにこの試験で使用したパソコンのスペックは、Intel Core 2 Duo T7200 2.00GHz、メモリ:3GB だったそうです。

 

これらの攻撃から守る具体的な対策は、

・8桁以上のパスワードを設定する

・ログインロックを設定する

・2要素認証を設定する

があります。

 

ログインロックとは、

複数回パスワードを間違えたら数分間アカウントを停止するなどの設定のことです。

こうすることで、解読するのにさらに膨大な時間がかかることになるので、総当たり攻撃の対策として効果的であるといえます。

 

2要素認証とは、

パスワードだけでログインするのではなく、あらかじめ登録していた「電話番号」や「メールアドレス」に認証コードが送られそれを認証して初めてログイン出来るというものになります。手間がかかっているので、これも対策として有効だといえると思います。

 

パスワードリスト攻撃

 

パスワードリスト攻撃とは、

攻撃者が事前に入手したIDとパスワードのリストを使って不正アクセスを試みる攻撃です。複数のサイトで同じIDやパスワードを使いまわしている人は要注意です。どこかのタイミングでパスワードが漏れてしまったら大変なことになってしまいます。

対策としては、IDやパスワードを使いまわさないことです。

パスワード管理アプリを使ってパスワードをきちんと管理しましょう。

 

クロスサイトスクリプティングXSS

 

クロスサイトスクリプティングXSSとは、

Webアプリケーションの画面表示処理の脆弱性をついた攻撃です。

攻撃者は、入力フォームにスクリプト付のリンクを含む内容を入力し、Webアプリケーションに罠を仕掛けます。訪問してきた人がリンクをクリックすることによって、別のWebサイト(クロスサイト)に遷移し入力した個人情報を盗み出すといった攻撃手法です。

対策としては、開発時に入力値を制限したりして、制限を予めかけておくことが大切です。 

 

SQLインジェクション

 

SQLインジェクションとは、

Webアプリケーションのデータベースの処理の脆弱性をついた攻撃です。

入力画面でデータベースを操作するSQLコマンドを入力することで、データベースの内部の情報を不正に操作します。

対策として、これも同様、開発の段階で、SQLエスケープ処理、多層バリデーション、バインドメカニズムの実装、そしてログ管理などを行う必要があります。

 

参考

辞書攻撃(Dictionary Attack) | セコムトラストシステムズのBCP(事業継続計画)用語辞典

ブルートフォースアタック(総当たり攻撃)とは?そのやり方・実際にかかる時間・対策方法は?

クロスサイトスクリプティング(XSS)のセキュリティ対策とは? | セキュリティ対策 | CyberSecurityTIMES

SQLインジェクションを防ぐ対策とは|わかりやすく仕組みを解説|セキュリティコラム|株式会社網屋

Rails: ActiveRecord::Baseメソッドについて

f:id:kina_kq:20210507080428j:plain

 

昨日ふとActiveRecord::Baseってなんだろうと思ったので、

今日はActiveRecord::Baseの役割を調べつつまとめていきたいと思います。

 

そもそもActiveRecordとは

 

ActiveRecordとは、

MVCでいうところのM、モデルに相当するものです。

 

ActiveRecordによりデータベースに恒久的に保存される必要のあるビジネスオブジェクトの作成と利用を円滑に行えるようにしています。

 

また、Ruby on Railsで採用されているOR Mapperとは何かというと、

オブジェクト思考プログラミング言語におけるオブジェクトリレーショナルデータベースRDB)の間でデータ形式の相互変換を行っているものにあたります。

 

モデルとテーブルを継ぎ合わせることで、Railsからテーブルのレコードにアクセスできるようにする役割があります。

 

Railsにはデフォルトで搭載されており、

利用する際にはActiveRecord::Baseというクラスを利用して使用します。

 

ActiveRecord::Baseとは

 

ActiveRecord::Baseとは、

「テーブルにアクセスして情報を取得するためのメソッド」にあたります。

 

モデルクラスはActiveRecord::Baseというクラスを継承しており、モデルクラスはテーブルにアクセスし情報を取得することが可能になります。

 

 

参考

Rails: ActiveRecord::Baseメソッドのまとめ - Qiita

O/Rマッピング(O/Rマッパー)とは - IT用語辞典 e-Words

Active Record の基礎 - Railsガイド