ネットワークの未来を切り開くSDNとNFV

前回の勉強内容

ponsuke-tarou.hatenablog.com

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

ETSI(欧州電気通信標準化機構)が提唱するNFV(Network Functions Virtualisation)に関する記述のうち,適切なものはどれか。

  1. ONF(Open Networking Foundation)が提唱するSDN(Software-Defined Networking)を用いて,仮想化を実現する。
  2. OpenFlowコントローラやOpenFlowスイッチなどのOpenFlowプロトコルの専用機器だけを使ってネットワークを構築する。
  3. ルータ,ファイアウォールなどのネットワーク機能を,汎用サーバを使った仮想マシン上のソフトウェアで実現する。 << 正解
  4. ロードバランサ,スイッチ,ルータなどの専用機器を使って,VLAN,VPNなどの仮想ネットワークを実現する。

出典 : 令和3年 春期 情報処理安全確保支援士試験 午前Ⅱ 問18

f:id:ponsuke_tarou:20220416191241j:plain
新宿区神楽坂にある熱海湯

SDNは、ネットワーク構成をソフトウェアで管理する技術です。

ネットワーク(network)の構築や設定をソフトウェア(sftware)で定義(defined)して管理・制御しちゃおうという考え方や技術のことで、英語では「Software Defined Network」、略して「SDN」です。

なんでそんなもんが現れたのか?

近年、サーバもストレージもクラウドで便利に構築できる時代です。
なのにネットワークだけ、物理的なルーターやらスイッチやら通信回線を管理したり設定したりと大変なので、ネットワークもソフトウェアで便利に仮想化しちゃおう!というわけなのです。
ネットワークを構築する機器をソフトウェアで制御して、構成変更したい時もソフトウェアでちゃちゃっとできるようにしようというわけです。

OpenFlowは、「経路制御の機能」と「データ転送の機能」を分離する技術です。

OpenFlowは、「経路制御の機能」と「データ転送の機能」を分離しておいて、ソフトウェアで一括して「経路制御」しちゃう技術です。
SDNを実現した技術の1つです。

OpenFlowを使ったSDN(Software-Defined Networking)の説明として,適切なものはどれか。

  1. 単一の物理サーバ内の仮想サーバ同士が,外部のネットワーク機器を経由せずに,物理サーバ内部のソフトウェアで実現された仮想スイッチを経由して,通信する方式
  2. データを転送するネットワーク機器とは分離したソフトウェアによって,ネットワーク機器を集中的に制御,管理するアーキテクチャ << 正解
  3. プロトコルの文法を形式言語を使って厳密に定義する,ISOで標準化された通信プロトコルの規格
  4. ルータやスイッチの機器内部で動作するソフトウェアを,オープンソースソフトウェア(OSS)で実現する方式

出典 : 平成29年 春期 応用情報技術者試験 午前問34

「経路制御の機能」はControl Panel、「データ転送の機能」はData Panelというものがやっています。

これまでのネットワーク機器は、Control PanelとData Panelが同居していました。
そして、更新があるたびに各機器を1つ1つ設定していました。

OpenFlowでは、Control PanelとData Panelを分割して、更新するときはControl Panelの部分から指示を出してData Panelを管理します。
Control Panelを入れているのがOpenFlowコントローラで「経路制御の機能」の部分を担当します。
Data Panelを入れているのがOpenFlowスイッチで「データ転送の機能」の部分を担当します。スイッチは物理的なネットワーク機器になります。

https://d2opt7k920jm8c.cloudfront.net/img/goods/L/43333300_1.jpg
GOYOU (ゴヨー) | V580-48X2Q4Z: Openflowスイッチ: ネットワーク機器

ONFは、OpenFlowを標準化して広げようと頑張る団体です。

OpenFlowは、マーティン・カサドさんが作り出しました。
マーティン・カサドさんのOpenFlowのコンセプトに「いいね!」を感じたMicrosoftGoogleFacebookなどの企業や組織が集まって「OpenFlowを良くして広げていこう」とういう団体を作りました。
それが、Open Networking Foundation、略して「ONF」です。
特定ベンダーに管理されずにみんなで改善して広めていこう!ということで「オープン」を大切にしているそうです。

ONF(Open Networking Foundation)が標準化を進めているOpenFlowプロトコルを用いたSDN(Software-Defined Networking)の説明として,適切なものはどれか。

  1. 管理ステーションから定期的にネットワーク機器のMIB(Management Information Base)情報を取得して,稼働監視や性能管理を行うためのネットワーク管理手法
  2. データ転送機能をもつネットワーク機器同士が経路情報を交換して,ネットワーク全体のデータ転送経路を決定する方式
  3. ネットワーク制御機能とデータ転送機能を実装したソフトウェアを,仮想環境で利用するための技術
  4. ネットワーク制御機能とデータ転送機能を論理的に分離し,コントローラと呼ばれるソフトウェアで,データ転送機能をもつネットワーク機器の集中制御を可能とするアーキテクチャ << 正解

出典 : 平成29年 秋期 応用情報技術者試験 午前問35

コントローラがフローテーブルをスイッチへ送って経路を制御します。

OpenFlowを使ったSDN(Software-Defined Networking)の説明として,適切なものはどれか。

  1. RFIDを用いるIoT(Internet of Things)技術の一つであり,物流ネットワークを最適化するためのソフトウェアアーキテクチャ
  2. 音楽や動画,オンラインゲームなどの様々なソフトウェアコンテンツをインターネット経由で効率的に配信するために開発された,ネットワーク上のサーバの最適配置手法
  3. データ転送と経路制御の機能を論理的に分離し,データ転送に特化したネットワーク機器とソフトウェアによる経路制御の組合せで実現するネットワーク技術 << 正解
  4. データフロー図やアクティビティ図などを活用して,業務プロセスの問題点を発見し改善を行うための,業務分析と可視化ソフトウェアの技術

出典 : 平成29年 春期 基本情報技術者試験 午前問35

OpenFlowのコントローラなので、英語で「OpenFlow Controller」、略して「OFC」です。
このコントローラが、データの転送や宛先書換えなどの振舞いを決めたフローテーブルを作って、ONSへ送ります。
OpenFlowのスイッチは、もらったフローテーブルに基づいてデータの転送や破棄、宛先の書き換えなどを実施します。
f:id:ponsuke_tarou:20220416191200j:plain

NFVは、ネットワーク機器を仮想化してソフトウェアにしちゃう技術です。

ネットワーク機器(netowork)の機能(functuion)を汎用サーバ上で仮想化(virtualization)してソフトウェアっぽくすることで、英語では「Network Functions Virtualization」、略して「NFV」です。
ルータとかスイッチとかを仮想マシンみたいにしちゃうんです。

NFVは、SDNとは違う技術です。

SDNは、ネットワーク機器の構成や接続を仮想化する技術です。
NFVは、ネットワーク機器自体を仮想化する技術です。
似ているけど、違うんです。

ETSI(欧州電気通信標準化機構)によって提案されたNFV(Network Functions Virtualisation)に関する記述として,適切なものはどれか。

  1. インターネット上で地理情報システムと拡張現実の技術を利用することによって,現実空間と仮想空間をスムーズに融合させた様々なサービスを提供する。
  2. 仮想化技術を利用し,ネットワーク機能を汎用サーバ上にソフトウェアとして実現したコンポーネントを用いることによって,柔軟なネットワーク基盤を構築する。<< 正解
  3. 様々な入力情報に対する処理結果をニューラルネットワークに学習させることによって,画像認識や音声認識自然言語処理などの問題に対する解を見いだす。
  4. プレースとトランジションと呼ばれる2種類のノードをもつ有向グラフであり,システムの並列性や競合性の分析などに利用される。

出典 : 平成30年 春期 応用情報技術者試験 午前問32

f:id:ponsuke_tarou:20220416191606j:plain
東武東上線ときわ台駅近くにあるキッチンときわは、美味しくてボリューム満点!

次回の勉強内容

勉強中・・・

PPPにもいろいろある

前回の勉強内容

ponsuke-tarou.hatenablog.com

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

シリアル回線で使用するものと同じデータリンクのコネクション確立やデータ転送を、LAN上で実現するプロトコルはどれか。

  1. MPLS
  2. PPP
  3. PPPoE << 正解
  4. PPTP

出典 : 平成31年 春期 情報処理安全確保支援士試験 午前Ⅱ 問19

シリアル通信は、1本の線で順番にデータを送信します。

1本の線で1ビットずつ順番(serial)にデータを送受信する転送していく通信(communication)のことで、英語で「serial communication」、日本語で「直列伝送」ともいいます。

通信 方式 いいこと
シリアル通信 1つの線で順番に転送 送受信タイミングの同期が不要
パラレル通信 複数の線で一気に転送 通信速度が速い

コンピュータ本体に外部記憶装置を繋いで通信する方式である「ATA」をシリアル通信にした仕様は「シリアルATA」といいます。

シリアルATAの説明として,適切なものはどれか。

  1. PCと周辺機器とを結ぶシリアルインタフェースであり,キーボード,マウス,スピーカ,プリンタ,CD-RWドライブなど多岐に渡る周辺装置を接続する。
  2. PCと周辺機器とを結ぶシリアルインタフェースであり,磁気ディスク装置,DVDドライブなどの高速な周辺装置を接続する。 <<正解
  3. PCと周辺機器とを結ぶシリアルインタフェースであり,ルータ又はモデムを接続する。
  4. PCとディジタルAV機器とを結ぶシリアルインタフェースであり,セットトップボックス,DVDプレーヤなどを接続する。

出典 : 平成21年 秋期 ネットワークスペシャリスト試験 午前Ⅱ 問22

データリンク層は、通信回線の部分で接続された機器間のデータ転送をします。

OSI参照モデルでは、ネットワーク層物理層の間にある層です。
「データのの変換や調整・優先制御などを行うネットワーク層」と「物理的な通信機器である物理層」との間を取り持って、通信相手の識別やコリジョン検知・回避、フレームの分割や組み立てなどを担当します。

複数のLANを接続するために用いる装置で,OSI基本参照モデルデータリンク層プロトコル情報に基づいてデータを中継する装置はどれか。

  1. ゲートウェイ >> トランスポート層からアプリケーション層までのプロトコル変換を行います。
  2. ブリッジ << 正解
  3. リピータ >> 物理層で流れてきた信号をもう一方のケーブルに送り出します。
  4. ルータ >> ネットワーク層でネットワーク同士を接続します。

出典 : 平成28年 春期 基本情報技術者試験 午前問32

LANは、決まった範囲で接続できるネットワークのことです。

決まった範囲(local area)で接続できるネットワーク(network)のことで、英語で「Local Area Network」、略して「LAN」、「らん」って読みます。

Ethrnetは、有線LANの規格です。

ケーブルを機器に挿してLAN接続するのが有線LANです。
文字通り線(ケーブル)の有るLANです。
この有線LANを使うときの「物理層」と「データリンク層」の仕様を決めている規格がEthrnetです。
ponsuke-tarou.hatenablog.com

LANを繋げておっきなネットワークにしたのがWANです。

LANの間を埋めて繋げておっきくした(wide area)ネットワーク(network)が、英語で「Wide Area Network」、略して「WAN」、「わん」って読みます。
WANのサービスには、アナログ専用線やデジタル専用線ISDN、広域イーサネット、IP-VPNなどがあります。

f:id:ponsuke_tarou:20220413213721j:plain
小田原城にあるきんじろうカフェでひと休み

MPLSは、パケットに宛先情報のラベルをくっつけてデータ転送する技術です。

特定のネットワーク内でラベルと呼ばれる短い符号をパケットなどに付与することで高速に転送処理を行う技術です。

ルータでは、普通IPヘッダを見て宛先を判断します。
MPLSを使った場合は、パケットにくっつけたラベルを見て宛先を判断します。

https://www.infraexpert.com/studygif/mpls2.gif
MPLS - MPLSの概要

MPLSを使うにはラベル(label)交換(switching)に対応したルータ(router)、英語では「Label Switching Router」、略して「LSR」を使う必要があります。
なぜならば、LSRは専用のプロトコル(LDP : Label Distribution Protocl)でラベル情報を付加したり、参照したりしてくれるからです。

ネットワーク層で働くルータによってラベルがくっつくのならば、MPLSもネットワーク層の技術にも思えるのですが、OSI参照モデルの層にきっちりハマるものでもなくネットワーク層データリンク層あたりの技術のようです。

MPLSがレイヤ2とレイヤ3のどちらなのかについては、多少不明瞭な部分もあるが、MPLSは7階層のOSI参照モデルにぴったり収まるものではなく、時にはレイヤ2.5と分類されることもある。
MPLSが生きながらえる理由(上) - MPLSが生きながらえる理由:Computerworld

PPPは、WAN回線やISDN接続でよく使うシリアル通信用のデータリンク層プロトコルです。

2点間で仮想の経路を確立してデータを送受信できるようにするデータリンク層プロトコルです。
点(point)から点(point)へ(to)データを送受信するプロトコル(protocol)、英語では「Point to Point Protocol」、略して「PPP」です
PPPには、ユーザ認証機能やエラー処理を行う機能があります。
ponsuke-tarou.hatenablog.com

PPPoEは、有線LANの規格であるEthernet上でPPPをできるようにしたプロトコルです。

イーサネット(ethrnet)上(over)で使えるPPP、英語では「PPP over Ethernet」、略して「PPPoE」です。
PPPのやり方の1つなので、PPPと同じデータリンク層プロトコルです。
そしてEthernet上で使えるのでLANで使えることになります。

PPTPは、データをカプセル化してPPPを使います。

GREというプロトコルでパケットをカプセル化してPPPでデータを送受信します。
PPPのやり方の1つなので、PPPと同じデータリンク層プロトコルです。

インターネット上に専用線を構築するVPNであるインターネットVPNで使われます。
ponsuke-tarou.hatenablog.com

まとめ

階層 階層名 役割 機器 プロトコル
第7層 アプリケーション層 アプリケーションごと固有の規定 ゲートウェイ
第6層 プレゼンテーション層 文字コードなどデータの表現形式の変換 ゲートウェイ
第5層 セッション層 通信プログラム間の通信の確立から終了までの管理 ゲートウェイ TLS
第4層 トランポート層 ノード間のデータ転送の管理 ゲートウェイ TCP / UDP
第3層 ネットワーク層 ネットワーク機器間のアドレスや経路の管理 ルータ / L3スイッチ IP / DHCP / RIP
第2層 データリンク層 直接接続された機器間データフレームの識別や転送 ブリッジ / L2スイッチ MAC / PPP / PPPoP / PPTP
第1層 物理層 ビット列の電気信号への変換 リピータ / ハブ

参考 : OSI参照モデルとTCP/IPについて - けんのへや

f:id:ponsuke_tarou:20220413214224j:plain
まるます家北赤羽店で贅沢なお昼ご飯

次回の勉強内容

ponsuke-tarou.hatenablog.com

CASBでシャドーITを撲滅して便利なSaaS利用

前回の勉強内容

ponsuke-tarou.hatenablog.com

CASBは、SaaS環境に特化した情報セキュリティを守るサービスです。

組織のメンバーがクラウドサービスを利用する際に一つのポイントを作ってそこでセキュリティを一括管理する考えやサービスのことで、英語では「Cloud Access Security Broker」、略して「CASB」、「きゃすびー」って読みます。

https://www.cybernet.co.jp/netskope/images/products/casb/fig03.png
CASB|SASEソリューション Netskope - サイバネット

なんでこんな機能が必要になったのでしょう?

SaaSは、アプリケーションソフトウェアの機能を,必要なときだけ利用者に提供するサービスのことです。

ponsuke-tarou.hatenablog.com

シャドーITは、会社が管理できていない社員が勝手に使っているサービスのことです。

Officeアプリを提供する「Microsoft 365」、オンライン会議ができる「Zoom」、Webメールの「Gmail」、グループウェアの「Kintone」と便利で使いやすいSaaSがいっぱいで、使わない手はありません!
そんな、状況下では会社のIT管理者が社員がどんなサービスを使っているか把握しきれない!なんてことが発生します。それがシャドーITです。
許可も管理もされていないと、セキュリティ管理も情報漏洩対策も個人任せになってしまいます。

だからこそ、会社の社員がルールに従って安全にSaaSを使えるように「CASB」が必要になったのです。

f:id:ponsuke_tarou:20220411214053j:plain
大田61の大森にある天狗湯

CASBの「可視化」「制御」「データセキュリティ」「脅威防御」でSaaSをしっかり管理!

社員がどんなサービスを使っているか「可視化」することで、危ないサービスは使っていないか?禁止しているサービスは使っていないか?業務ファイルのアップロードやダウンロードはどんな状況か?などを分析できるようにします。

セキュリティ対策として,CASB(Cloud Access Security Broker)を利用した際の効果はどれか。

  1. クラウドサービスプロバイダが,運用しているクラウドサービスに対してDDoS攻撃対策を行うことによって,クラウドサービスの可用性低下を緩和できる。
  2. クラウドサービスプロバイダが,クラウドサービスを運用している施設に対して入退室管理を行うことによって,クラウドサービス運用環境への物理的な不正アクセスを防止できる。
  3. クラウドサービス利用組織の管理者が,組織で利用しているクラウドサービスに対して脆弱性診断を行うことによって,脆弱性を特定できる。
  4. クラウドサービス利用組織の管理者が,組織の利用者が利用している全てのクラウドサービスの利用状況の可視化を行うことによって,許可を得ずにクラウドサービスを利用している者を特定できる。

出典 : 令和3年 春期 情報処理安全確保支援士試験 午前Ⅱ 問11

SaaSとの通信や通知を会社で決めたセキュリテーポリシーでしっかり「制御」します。

https://www.hitachi-solutions.co.jp/bitglass/sp/shared/images/bitglass3.png
次世代CASB Bitglass | 次世代CASB Bitglass | 日立ソリューションズ

機密情報を定義して「データセキュリティ」を計り情報漏洩を防止します。
マルウェアランサムウェアを検知・隔離したり、データのコピーや大量データのダウンロードといった異常を検出することで「脅威防御」します。

f:id:ponsuke_tarou:20220411214134j:plain
大田2の照の湯は黒湯が超絶気持ちいい

次回の勉強内容

ponsuke-tarou.hatenablog.com

TLS1.3の暗号スイートは甘くない

前回の勉強内容

ponsuke-tarou.hatenablog.com

TLSは、「公開鍵証明書による認証」「共通鍵暗号による通信暗号化」「ハッシュ関数による改竄検知」をしてくれるプロトコルです。

ponsuke-tarou.hatenablog.com

TLSで使う暗号アルゴリズムハッシュ関数、鍵長などの組み合わせを暗号スイートといいます。

暗号(cipher)ひとそろい(suite)、英語で「Cipher Suites」、日本語で「暗号スイート」です。

この仕様では、TLS 1.3で使用する次の暗号スイートを定義しています。
+------------------------------+-------------+
|Description          |Value   |
+------------------------------+-------------+
|TLS_AES_128_GCM_SHA256   |{0x13,0x01} |
|TLS_AES_256_GCM_SHA384   |{0x13,0x02} |
|TLS_CHACHA20_POLY1305_SHA256|{0x13,0x03} |
|TLS_AES_128_CCM_SHA256   |{0x13,0x04} |
|TLS_AES_128_CCM_8_SHA256  |{0x13,0x05} |
+------------------------------+-------------+
RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳

TLS_AES_128_GCM_SHA256」や「TLS_AES_128_CCM_SHA256」が暗号スイートのお名前になります。

暗号スイートのお名前にはルールがあります。
TLS1.3からは「TLS_AEAD_HASH 」ルールになりました。

TLS_AEAD_HASH
↑   ↑     ↑
|  |    「HASH」にはHKDFで使用されるハッシュアルゴリズムがはい
|  「AEAD」にはAEADアルゴリズムがはい
「TLS」は固定の文字
例) TLS_AES_128_GCM_SHA256 => 「TLS_」+「AESの鍵長128でGCMモード」+「ハッシュアルゴリズムはSHA256」

参考 : RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳の「B.4. 暗号スイート」

AEADは、「公開鍵証明書による認証」「共通鍵暗号による通信暗号化」「ハッシュ関数による改竄検知」を一気にやってくれます。

関連する(associated)データによる認証(authenticated)付き暗号化(encryptio)、英語では「AuthenticatedEncryption with Associated Data」、略して「AEAD」です、短く日本語で「認証暗号」とも言います。
TLS1.2から採用されました。

そのため、「ハッシュ関数による改竄検知」はAEADでやっちゃいます。
なので、TLS1.3の暗号スイートのお名前にはルールにある「HASH」には、HKDFで使用されるハッシュアルゴリズムが使われます。

HKDFは、HMACベースの鍵導出関数です。

ハッシュ関数(hashed)を使って作られたMACを基礎(base)にした秘密値から鍵(key)を導出(derivation)する関数(function)で、日本語では「HMACベース鍵導出関数」、英語では「Hashed Message Authentication Code(HMAC)-based key derivation function」、略して「HKDF」です。長すぎて覚えられません。
MACといっても世の中いろいろありますが「メッセージ認証コード」の意味のMACです。
ponsuke-tarou.hatenablog.com

暗号アルゴリズムには、ブロック暗号とストリーム暗号があります。

方式 暗号化の方法 特徴 対象の暗号アルゴリズム
ストリーム暗号 平文をビット単位あるいはバイト単位で順次処理する まとまった単位になるまで待たないので複合が早い RC4
ブロック暗号 特定のビット数のまとまり毎に処理する ストリーム暗号より安全性の研究が進んでいて広く使われている DES, 3DES, AES

ブロック暗号で処理する「特定のビット数のまとまり」をブロック長と言います。

米国NISTが制定した,AESにおける鍵長の条件はどれか。

  1. 128ビット,192ビット,256ビットから選択する。<<正解
  2. 256ビット未満で任意に指定する。
  3. 暗号化処理単位のブロック長より32ビット長くする。
  4. 暗号化処理単位のブロック長より32ビット短くする。

出典 :平成24年 春期 情報セキュリティスペシャリスト 午前Ⅱ 問4

ブロック暗号で暗号化を繰り返す方法のことを「モード」といいます。

ブロック暗号は「特定のビット数のまとまり」の暗号化を繰り返して処理します。その繰り返し方法のことを「モード」といいます。

モード名 英語 繰り返し方
ECB Electronic(電子) CodeBook(符号表) Mode ブロック毎に暗号化する処理を繰り返す
CBC Cipher(暗号) Block Chaining(連鎖) Mode 「直前ブロックの暗号文」と「次ブロックの平文」のXOR(排他的論理和)の値を暗号化する
CFB Cipher(暗号)-FeedBack Mode 「直前ブロックの暗号文をさらに暗号化した値(鍵ストリーム)」と「次ブロックの平文」のXOR(排他的論理和)の値を暗号文とする
GCM Galois/Counter Mode 改竄検知までやってくれる認証付きのモードらしいのですが難しくてよくわかりません

ECBのように「ブロック毎に暗号化する」だけだと危険が伴います。
悪い人が大切そうなところのブロックだけ解読しようとして総当たり攻撃をしてくるかもしれません。全部を解読するより特定のブロックだけ解読する方が楽ですからね。
そんな危険を避けるために「直前の暗号文など他の要素を合わせる」というECB以外のモードがあります(上記表に書いてある以外のモードもたくさんあります)。

しかし、CBC脆弱性が発覚してしまいました。
CBCは、「直前ブロックの暗号文」を使うので一番最初のブロックには「直前ブロックの暗号文」がありません。そこで、1ブロック分のビット列を代わりに用意して使います。
この「1ブロック分のビット列」を初期化(initialization)ベクトル(vector)、英語で「initialization vector」、略して「IV」といいます。
CBC脆弱性はIVの部分にありました。

SSL プロトコルTLS プロトコルには、CBC モードで選択平文攻撃を受ける脆弱性が存在します。
SSL プロトコルTLS プロトコルCBC モードで動作する際、初期化ベクトル (IV) の決定方法に問題があり、選択平文攻撃を受ける脆弱性が存在します。
JVNDB-2011-002305 - JVN iPedia - 脆弱性対策情報データベース

f:id:ponsuke_tarou:20220406225248j:plain
足立34のおきもと湯

TLS1.3では、TLS1.2より暗号スイートが厳しくなりました。

TLSでは、暗号スイートにそれぞれ何を使うかサーバとクライアントで合意してから通信を開始します。
セキュリティの強化により暗号スイートで、TLS1.2で使えたけれどTLS1.3で非推奨になったものがいくつかあります。

技術分類 非推奨になったもの 残念なこと
暗号アルゴリズム RC4 TLS プロトコルおよび SSL プロトコルで使用される RC4 アルゴリズムにおけるストリームの最初のバイトへの平文回復攻撃の脆弱性 - JVN
暗号アルゴリズム DES TLS プロトコルなどの製品で使用される DES および Triple DES 暗号における平文のデータを取得される脆弱性 - JVN
暗号アルゴリズム AES-CBC AEADでないCBC モードは非推奨になった
ハッシュ関数 MD5 コリジョン攻撃への脆弱性
ハッシュ関数 SHA-1 SHA-1の安全性低下について - CRYPTREC

TLS1.3は、RFC8446で規格化されて2018年に公開されました。
参考 : RFC 8446 - The Transport Layer Security (TLS) Protocol Version 1.3 日本語訳

TLS1.3の暗号スイートに関する説明のうち,適切なものはどれか。

  1. TLS1.2で規定されている共通鍵暗号AES-CBCを必須の暗号アルゴリズムとして継続利用できるようにしている。
  2. Wi-Fiアライアンスにおいて規格化されている。
  3. サーバとクライアントのそれぞれがお互いに別の暗号アルゴリズムを選択できる。
  4. 認証暗号アルゴリズムとハッシュアルゴリズムの組みで構成されている。 << 正解

出典 : 令和3年 秋期 情報処理安全確保支援士試験 午前Ⅱ 問17

ダウングレード攻撃は、いまいちな暗号スイートを無理やり使わせることで盗み読みをします。

中間者攻撃で輸出グレードである512bit以下の強度が超弱いRSA鍵を使わせる「FREAK」、
DH鍵交換の脆弱性を利用して中間者攻撃で中間者攻撃で輸出グレードである512bit以下の強度が超弱い鍵を使わせる「Logjam」、
脆弱性のあるSSL3.0以下での通信を強制する「バージョンロールバック攻撃」
などがあります。

SSL/TLSのダウングレード攻撃に該当するものはどれか。

  1. 暗号化通信中にクライアントPCからサーバに送信するデータを操作して,強制的にサーバのディジタル証明書を失効させる。
  2. 暗号化通信中にサーバからクライアントPCに送信するデータを操作して,クライアントPCのWebブラウザを古いバージョンのものにする。
  3. 暗号化通信を確立するとき,弱い暗号スイートの使用を強制することによって,解読しやすい暗号化通信を行わせる。<< 正解
  4. 暗号化通信を盗聴する攻撃者が,暗号鍵候補を総当たりで試すことによって解読する。

出典 : 平成29年 春期 情報処理安全確保支援士試験 午前Ⅱ 問2

f:id:ponsuke_tarou:20220408065851j:plain
板橋12のアクアパレス藤

次回の勉強内容

ponsuke-tarou.hatenablog.com

SAMLを使ったSSO

前回の勉強内容

ponsuke-tarou.hatenablog.com

シングルサインオンにはクッキーやリバースプロキシ、SAMLを使う方法があります。

シングルサインオンは、1度(single)の認証(sign on)で複数のシステムやサービスが使えるようになるので、「Single Sign On」、略してSSOです。
そんなSSOはいくつかの方法で実現されます。

シングルサインオンの説明のうち,適切なものはどれか。

  1. クッキーを使ったシングルサインオンの場合,サーバごとの認証情報を含んだクッキーをクライアントで生成し,各サーバ上で保存,管理する。
  2. クッキーを使ったシングルサインオンの場合,認証対象のサーバを,異なるインターネットドメインに配置する必要がある。
  3. リバースプロキシを使ったシングルサインオンの場合,認証対象のWebサーバを,異なるインターネットドメインに配置する必要がある。
  4. リバースプロキシを使ったシングルサインオンの場合,利用者認証においてパスワードの代わりにディジタル証明書を用いることができる。 << 正解

出典 : 平成24年 秋期 応用情報技術者試験 午前問36

エージェント方式 : Cookieを使うSSOの流れ

  1. ユーザのログイン時にWebサーバが認証サーバに接続して認証を行う。
  2. その認証情報をCookieに設定してユーザーに返す。
  3. 別のWebサーバにアクセスする時は、Webサーバが認証サーバにCookieの情報で認証を行う。

Cookieを使うSSOでは、サービスのWebサーバにエージェントというソフトウェアを設定する必要があります。
そのため「エージェント方式」といいます。

エージェント方式におけるSSO認証処理のシーケンスは,次のとおりである。

  1. PCからWebアプリケーションサーバに、サービス要求を行う。
  2. Webアプリケーションサーバ内のエージェントは、サービス要求中のCookieに認証済資格情報(以下、アクセスチケットという)が含まれているか確認する。含まれていなければ,サービス要求はSSOサーバヘ[ イ : リダイレクト ]される。
  3. SSOサーバからPCに、認証画面を送る。
  4. PCからSSOサーバに、UserIDとPasswordを送出する。
  5. SSOサーバは、UserIDとPasswordから利用者のアクセスの正当性を確認したら、アクセスチケットを発行して、Cookieに含めて応答を返す。サービス要求は、Webアプリケーションサーバヘ[ イ : リダイレクト ]される。
  6. Webアプリケーションサーバ内のエージェントは、SSOサーバにアクセスチケット確認要求を送り、SSOサーバは、確認して応答を返す。
  7. Webアプリケーションサーバは、6.の応答によって利用者のアクセスの正当性が確認できた場合、Webアプリケーション画面を送出する。

エージェント方式におけるSSO認証処理のシーケンスの1~7を図示すると,図2のようになる。
f:id:ponsuke_tarou:20220331231703p:plain
出典 : 平成27 年秋期 ネットワークスペシャリスト試験 午後Ⅰ

リバースプロキシを使うSSOの流れ

  1. リバースプロキシがアクセスしてきたユーザを認証する。
  2. リバースプロキシはWebサーバに代理アクセスし結果をユーザに返す。

f:id:ponsuke_tarou:20220330233238j:plain
練馬区石神井台にあるたつの湯には広い駐車場があるがそこまでの道が超細い

SAMLは、認証情報を交換するためのマークアップ言語です。

安全(security)を判定(assertion)するためのマークアップ言語(markup language)ということで、「Security Assertion Markup Language」、略してSAML(サムル)です。
異なるインターネットドメイン間で認証情報を交換するためのXMLをベースにした規格です。

SAML(Security Assertion Markup Language)の説明として,最も適切なものはどれか。

  1. Webサービスに関する情報を公開し,それらが提供する機能などを検索可能にするための仕様
  2. 権限がない利用者による読取り,改ざんから電子メールを保護して送信するための仕様
  3. ディジタル署名に使われる鍵情報を効率よく管理するためのWebサービスの仕様
  4. 認証情報に加え,属性情報とアクセス制御情報を異なるドメインに伝達するためのWebのサービス仕様 << 正解

出典 : 令和2年 秋期 情報処理安全確保支援士試験 午前Ⅱ 問2

IdPは、認証情報を管理するサービスです。

認証する(identify)サービスを供給する(provider)ので、「Identify Provider」、略してIdPです。

使うサービスがたくさんあると、その分IDやらパスワードやらの認証情報を管理しなくてはならなくなります。
IdPが、ユーザとサービスの間を仲介してくれることで1つの認証情報でたくさんのサービスを使うことができます。

また、ユーザを管理する人も1か所で管理できるので、ユーザの追加や削除が楽になりますね。

SAMLを使うSSOの流れ

  1. ユーザがサービスに接続する
  2. サービスがSAML認証要求をユーザを経てIdPに送信する
  3. IdPの認証画面でユーザはログインすることで認証処理をする
  4. IdPがSAML認証応答をユーザ経てサービスに送信する(SAMLアサーション)
  5. ユーザがサービスにログインできる

f:id:ponsuke_tarou:20220403212105j:plain

シングルサインオンの実装方式の一つであるSAML認証の特徴はどれか。

  1. IdP(Identity Provider)がSP(Service Provider)の認証要求によって利用者認証を行い,認証成功後に発行されるアサーションをSPが検証し,問題がなければクライアントがSPにアクセスする。<< 正解
  2. Webサーバに導入されたエージェントが認証サーバと連携して利用者認証を行い,クライアントは認証成功後に利用者に発行されるcookieを使用してSPにアクセスする。
  3. 認証サーバはKerberosプロトコルを使って利用者認証を行い,クライアントは認証成功後に発行されるチケットを使用してSPにアクセスする。
  4. リバースプロキシで利用者認証が行われ,クライアントは認証成功後にリバースプロキシ経由でSPにアクセスする。

出典 : 令和3年 秋期 情報処理安全確保支援士 午前Ⅱ 問4

ぽんすけは、Chromeを使う時にChromeにログインしようとするとCloudGate UNOのログイン画面が表示されてログインするとChromeのアカウントにログインできます。

これは「CloudGate UNOというIdP」が「Google Workspaceというサービスプロバイダ」から認証要求を受けて「ぽんすけというクライアント」をSSOできるようにしているのです。
参考 : Google Workspace向けSSOサービス | CloudGate UNO(クラウドゲートウノ)

f:id:ponsuke_tarou:20220331225421j:plain
練馬35の貫井浴場には岩風呂な水風呂がある

次回の勉強内容

ponsuke-tarou.hatenablog.com

DNS CAAは、不正なサーバ証明書の発行を防ぎます。

前回の勉強内容

ponsuke-tarou.hatenablog.com

DNS CAAは、不正なサーバ証明書の発行を防ぎます。

DNSにおいてDNS CAA(Certification Authority Authorization)レコードを使うことによるセキュリティ上の効果はどれか。

  1. WebサイトにアクセスしたときのWebブラウザに鍵マークが表示されていれば当該サイトが安全であることを,利用者が確認できる。
  2. Webサイトにアクセスする際のURLを短縮することによって,利用者のURLの誤入力を防ぐ。
  3. 電子メールを受信するサーバでスパムメールと誤検知されないようにする。
  4. 不正なサーバ証明書の発行を防ぐ。 << 正解

出典 : 令和3年 春期 情報処理安全確保支援士 午前Ⅱ 問10


DNSサーバが管理するドメインの範囲をゾーンといいます。
ゾーンの情報はゾーンファイルというファイルに設定され、その1つ1つをレコードといいます。

そして、「Certification Authority(認証局)」を「Authorization(許可)」するコードがCAAです。

認証局は、CAAを確認して証明書を発行していいか判断します。

証明書は認証局が発行します。
なので、ドメイン管理者は、ドメインサブドメインの証明書を発行する時に認証局にお願いします。
お願いされた認証局は、CAAを確認することで自分に証明書発行が許可されているかを確認します。
許可されていなかったら、お願いしたドメイン管理者に「間違っているよ」と教えてあげます。
許可されていたら、証明書を発行します。

たとえば、「example.com. 86400 IN CAA 0 issue “ca.example.net”」というCAAが設定されていると
example.comとそのサブドメイン」の証明書を
TTL(86400秒)期限内あるいは8時間以内」に発行することを
「ca.example.netという認証局」に「issue(許可)」するよ
ということになります。
参考 : DNS CAAとは

f:id:ponsuke_tarou:20220330224017j:plain
赤羽香取神社の神様かもしれない猫

次回の勉強内容

ponsuke-tarou.hatenablog.com

DNS水責め攻撃は、オープンリゾルバを利用して権威DNSサーバを過負荷にします。

前回の勉強内容

ponsuke-tarou.hatenablog.com

DNS水責め攻撃は、オープンリゾルバを利用して権威DNSサーバを過負荷にします。

f:id:ponsuke_tarou:20220330184227j:plain

DNS水責め攻撃(ランダムサブドメイン攻撃)の手口と目的に関する記述のうち,適切なものはどれか。

  1. ISPが管理するDNSキャッシュサーバに対して,送信元を攻撃対象のサーバのIPアドレスに詐称してランダムかつ大量に生成したサブドメイン名の問合せを送り,その応答が攻撃対象のサーバに送信されるようにする。
  2. オープンリゾルバとなっているDNSキャッシュサーバに対して,攻撃対象のドメインサブドメイン名をランダムかつ大量に生成して問い合わせ,攻撃対象の権威DNSサーバを過負荷にさせる。 << 正解
  3. 攻撃対象のDNSサーバに対して,攻撃者が管理するドメインサブドメイン名をランダムかつ大量に生成してキャッシュさせ,正規のDNSリソースレコードを強制的に上書きする。
  4. 攻撃対象のWebサイトに対して,当該ドメインサブドメイン名をランダムかつ大量に生成してアクセスし,非公開のWebページの参照を試みる。

出典 : 平成29年 春期 情報処理安全確保支援士 午前Ⅱ 問6

ランダムな存在しないサブドメイン名を生成して大量に問い合わせるので「ランダムサブドメイン攻撃」とも言います。

DNS水責め攻撃(ランダムサブドメイン攻撃)の方法はどれか。

  1. 標的のキャッシュサーバに,ランダムかつ大量に生成した偽のサブドメインDNS情報を注入する。
  2. 標的の権威DNSサーバに,ランダムかつ大量に生成した存在しないサブドメイン名を問い合わせる。 << 正解
  3. 標的のサーバに,ランダムに生成したサブドメインDNS情報を格納した,大量のDNSレスポンスを送り付ける。
  4. 標的のサーバに,ランダムに生成したサブドメインDNS情報を格納した,データサイズが大きいDNSレスポンスを送り付ける。

出典 : 平成30年 春期 データベーススペシャリスト 午前Ⅱ 問20

f:id:ponsuke_tarou:20220330205444j:plain
十条銀座でカレーランチ

次回の勉強内容

ponsuke-tarou.hatenablog.com

IEEE802.1Xとそのプロトコル達

前回の勉強内容

ponsuke-tarou.hatenablog.com

IEEE802.1Xは、ユーザ認証とアクセス制御を行うプロトコルの規格です。

知らない人が、ネットワークに接続してこないようにユーザ認証とアクセス制御をするプロトコルの規格です。

無線LANの認証で使用される規格IEEE 802.1xが規定しているものはどれか。

  1. アクセスポイントがRADIUSサーバと連携するユーザ認証の枠組み << 正解
  2. アクセスポイントが認証局と連携し,暗号化パスワードをセションごとに生成する仕組み
  3. ディジタル証明書を使って認証するプロトコルWEP
  4. 無線LANの認証プロトコルとして,信号レベルで衝突を検知するCSMA/CD方式

https://www.ap-siken.com/kakomon/17_aki/img/74.gif
平成17年秋期問74 IEEE 802.1xが規定しているもの|応用情報技術者試験.com

IEEE802.1Xで認証を行うためには、「サプリカント」「認証装置」「認証サーバ」を使用します。

構成要素 英語表記 立場 機器
サプリカント Supplicant 認証クライアント パソコンなどのクライアントにインストールされるソフトウェア
認証装置 Authenticator サプリカントと認証サーバの仲介役 スイッチや無線LAN
認証サーバ Authentication Server 認証を行うサーバ RADIUSなど

f:id:ponsuke_tarou:20220323203810j:plain

無線LAN環境に複数台のPC、複数台のアクセスポイント及び利用者認証情報を管理する1台のサーバがある。利用者認証とアクセス制御にIEEE802.1XとRADIUSを利用する場合の特徴はどれか。

  1. PCにはIEEE802.1Xのサプリカントを実装し、RADIUSクライアントの機能をもたせる。 << 正解
  2. アクセスポイントにはIEEE802.1Xのオーセンティケータを実装し、RADIUSクライアントの機能をもたせる。
  3. アクセスポイントにはIEEE802.1Xのサプリカントを実装し、RADIUSサーバの機能をもたせる。
  4. サーバにはIEEE802.1Xのオーセンティケータを実装し、RADIUSサーバの機能をもたせる。

出典 : 平成25年 春期 情報セキュリティスペシャリスト試験 午前Ⅱ 問7

f:id:ponsuke_tarou:20220314181113j:plain
駒込にあるjam coffeeの真珠パンケーキ

EAPは、IEEE802.1Xに使えるプロトコルです。

英語では、「PPP Extensible(伸張性の) Authentication(認証) Protocol」です
2点間で仮想の経路を確立してデータを送受信できるようにするPPPという通信プロトコルがあります。
このPPPを拡張したプロトコルEAPです。
ponsuke-tarou.hatenablog.com

EAPでは、いろんな認証プロトコルを使えます。

EAPに認証機能があるわけではありません。
「有線LANや無線LANデータリンク層」と「いろんな認証プロトコル」の間を取り持つのがEAPです。

名称 認証プロトコル クライアント認証 サーバ認証
EAP-MD5 MD5 ユーザID/パスワード
パスワードはCHAPでハッシュ化する
なし
EAP-TLS TLS 証明書 証明書
EAP-TTLS TTLS ユーザID/パスワード 証明書
EAP-PEAP PEAP ユーザID/パスワード 証明書

IEEE802.1Xで使われるEAP-TLSによって実現される認証はどれか。

  1. CHAPを用いたチャレンジレスポンスによる利用者認証 << EAP-MD5の説明
  2. あらかじめ登録した共通鍵によるサーバ認証と,時刻同期のワンタイムパスワードによる利用者認証 << EAP-TTLSの説明
  3. ディジタル証明書による認証サーバとクライアントの相互認証
  4. 利用者IDとパスワードによる利用者認証

出典 : 平成24年 秋期 情報セキュリティスペシャリスト試験 午前Ⅱ 問2

CHAPはパスワードをハッシュ化するプロトコルです。

英語では「Challenge-Handshake Authentication(認証) Protocol」です。
サーバへパスワードを送信する時にそのまま平文で送ると危ないので、「チャレンジ」と「パスワード」を合わせてハッシュ化します。
「チャレンジ」は、ランダムな短いデータのことです。

f:id:ponsuke_tarou:20220323203928j:plain
逗子海岸ロードオアシスのまるわ食堂でのお昼ご飯

次回の勉強内容

ponsuke-tarou.hatenablog.com

Visual Studio CodeとDockerを使ってでVue.jsをやってみる

環境 : macOS Monterey バージョン12.2.1

準備する

  1. Visual Studio Codeを準備する
    1. Visual Studio Codeをインストールする
    2. [View] > [Extensions] > 「Remote-Containers」を検索してインストールする
      • f:id:ponsuke_tarou:20210118115540p:plain
  2. Docker Desktopをインストールする

f:id:ponsuke_tarou:20220314180353j:plain
板橋52のアクアセゾン

コンテナを作る

  1. 任意の場所にDocker環境用のディレクトリを作成する
    1. 今回は、~/docker/vueというディレクトリにしてみた
  2. Shift + Command + P > [Remote-Containers: Open Folder in Container…] > 作成したディレクトリを選択する
  3. [Show All Definitions...] > 「vue」を入力して表示されたVue (Community)を選択する
    1. f:id:ponsuke_tarou:20220228162414p:plain
  4. Node.jsのバージョンを選択する(今回はdefaultの「16」にした)
  5. 追加で欲しいものがあれば選択する > [OK]を押下するとコンテナが作成される
    1. f:id:ponsuke_tarou:20220228162432p:plain
      今回は何も選択しなかった
  6. コンテナに入っている状態のVisual Studio Codeが開く
    1. .devcontainerディレクトリが作成されて中にdevcontainer.jsonとDockerfileが格納されている
    2. DockerfileをみるとVue開発用のコマンドツールであるVue CLIとVue cli-service-global(Vue CLIで使うもの)もインストールしていた
    3. f:id:ponsuke_tarou:20220228162518p:plain

f:id:ponsuke_tarou:20220314180835j:plain
荒川区のアクアリゾートに行く前に食べたラーメン

プロジェクトを作る

Vue CLIvue create {プロジェクト名}でプロジェクトを作成できる。

# プロジェクト作成を開始する
$ vue create my_app
# 「本家のレジストリは接続が遅いのでミラーサイトを使用するか」を聞かれます。
?  Your connection to the default yarn registry seems to be slow.
   Use https://registry.npmmirror.com for faster installation? (Y/n) No # << 本家のレジストリを使うため「n」を入力
# Vueのバージョンを選択する(細かく設定したい場合は「Manually select features」を選択する)
Vue CLI v5.0.1
? Please pick a preset: (Use arrow keys)
❯ Default ([Vue 3] babel, eslint) 
  Default ([Vue 2] babel, eslint) 
  Manually select features

# パッケージ管理を選択する
Vue CLI v5.0.1
? Please pick a preset: Default ([Vue 3] babel, eslint)
? Pick the package manager to use when installing dependencies: 
❯ Use Yarn 
 Use NPM 

# プロジェクトが作成される
Vue CLI v5.0.1
✨  Creating project in /workspaces/docker/vue/my_app.
⚙️  Installing CLI plugins. This might take a while...

yarn install v1.22.17
info No lockfile found.
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...
success Saved lockfile.
Done in 150.03s.
🚀  Invoking generators...
📦  Installing additional dependencies...

yarn install v1.22.17
[1/4] Resolving packages...
[2/4] Fetching packages...
[3/4] Linking dependencies...
[4/4] Building fresh packages...

success Saved lockfile.
Done in 34.63s.
⚓  Running completion hooks...

📄  Generating README.md...

🎉  Successfully created project my_app.
👉  Get started with the following commands:

 $ cd my_app
 $ yarn serve

# こんな感じの構成でプロジェクトができた
$ find -maxdepth 2
.
./.devcontainer
./.devcontainer/Dockerfile
./.devcontainer/devcontainer.json
./my_app
./my_app/.gitignore
./my_app/README.md
./my_app/babel.config.js
./my_app/jsconfig.json
./my_app/node_modules
./my_app/package.json
./my_app/public
./my_app/src
./my_app/vue.config.js
./my_app/yarn.lock

プロジェクトを実行する

# プロジェクトのディレクトリへ移動して
$ cd my_app/
# プロジェクトを実行する
$ yarn serve
yarn run v1.22.17
$ vue-cli-service serve
 INFO  Starting development server...


 DONE  Compiled successfully in 16223ms                                                           9:02:46 AM


  App running at:
  - Local:   http://localhost:8080/ 
  - Network: http://172.17.0.2:8080/

  Note that the development build is not optimized.
  To create a production build, run yarn build.

f:id:ponsuke_tarou:20220228170850p:plain
プロジェクトを実行して「http://localhost:8080/」をブラウザで表示する

f:id:ponsuke_tarou:20220314180930j:plain
荒川10のアクアリゾート

ディジタルフォレンジックスでサイバー犯罪を科学捜査

前回の勉強内容

ponsuke-tarou.hatenablog.com

ディジタルフォレンジックスは、電子機器で犯罪の証拠を捜査する手法です。

外部からの不正アクセスによるコンピュータに関する犯罪の疑いが生じた。そのとき,関係する機器やデータ,ログなどの収集及び分析を行い,法的な証拠性を明らかにするための手段や技術の総称はどれか。

  1. ディジタルサイネージ
  2. ディジタル署名
  3. ディジタルディバイド
  4. (答え)ディジタルフォレンジック

出典 : 平成31年 春期 ITパスポート試験 問99

ディジタルフォレンジックスは、digital forensics(科学捜査)です。
多岐にわたるサーバー犯罪の証拠を集めて保全して分析する科学捜査の手法です。

ディジタルフォレンジックスの説明として,適切なものはどれか。

  1. あらかじめ設定した運用基準に従って,メールサーバを通過する送受信メールをフィルタリングすること
  2. サーバに対する外部からの攻撃や不正なアクセスを防御すること
  3. 磁気ディスクなどの書換え可能な記憶媒体を単に初期化するだけではデータを復元される可能性があるので,任意のデータ列で上書きすること
  4. (答え)不正アクセスなどコンピュータに関する犯罪の法的な証拠性を確保できるように,原因究明に必要な情報の保全,収集,分析をすること

出典 : 平成26年 春期 応用情報技術者試験 午前 問41

目的には、犯罪の原因追求だけではなく責任の所在を明らかにしたりと裁判に向けた備えもあります。

ディジタルフォレンジックスに該当するものはどれか。

  1. 画像や音楽などのディジタルコンテンツに著作権者などの情報を埋め込む。
  2. コンピュータやネットワークのセキュリティ上の弱点を発見するテスト手法の一つであり,システムを実際に攻撃して侵入を試みる。
  3. ネットワーク管理者や利用者などから,巧みな話術や盗み聞き,盗み見などの手段によって,パスワードなどのセキュリティ上重要な情報を入手する。
  4. (答え)犯罪に関する証拠となり得るデータを保全し,その後の訴訟などに備える。

出典 : 令和2年 秋期 情報処理安全確保支援士試験 午前Ⅱ 問13

f:id:ponsuke_tarou:20210929182954j:plain
埼玉県深谷市にある滝澤酒造のレンガ煙突

証拠となり得るデータを「保全」「収集」「分析」します。

犯罪が発生したら「現場保存」とよくドラマでも言っています。
犯罪の対象となったコンピュータなどの電子機器における犯罪発生時点のデータをきっちり「保全」します。

犯罪によっては、データを勝手に削除するので削除履歴などからデータ復元もして証拠を「収集」します。

ディジタルフォレンジックスの手順を収集,検査,分析,報告に分けたとき,そのいずれかに該当するものはどれか。

  1. サーバとネットワーク機器のログをログ管理サーバに集約し,リアルタイムに相関分析することによって,不正アクセスを検出する。
  2. (答え)ディスクを解析し,削除されたログファイルを復元することによって,不正アクセスの痕跡を発見する。
  3. 電子メールを外部に送る際に,本文及び添付ファイルを暗号化することによって,情報漏えいを防ぐ。
  4. プログラムを実行する際に,プログラムファイルのハッシュ値と脅威情報を突き合わせることによって,マルウェアを発見する。

出典 : 平成31年 春期 応用情報技術者試験 午前 問39

ハッシュ関数を使って「収集」したデータのコピーからハッシュ値を得ておいて、原本のハッシュ値と比較して一切変更されていないことを確認できるようにしておきます。
そうすると、後で情報開示や裁判の時に証拠をきっちり「保全」していることを証明できます。

ディジタルフォレンジックスでハッシュ値を利用する目的として,適切なものはどれか。

  1. 一方向性関数によってパスワードを復元できないように変換して保存する。
  2. 改変されたデータを,証拠となり得るように復元する。
  3. (答え)証拠となり得るデータについて,原本と複製の同一性を証明する。
  4. パスワードの盗聴の有無を検証する。

出典 : 平成28年 春期 基本情報技術者試験 午前 問44

f:id:ponsuke_tarou:20210929183316j:plain
滝澤酒造の大吟醸升田屋は値段以上の美味しさ

次回の勉強内容

ponsuke-tarou.hatenablog.com

押し寄せるDNSへの攻撃

前回の勉強内容

ponsuke-tarou.hatenablog.com

DNSは、ドメイン名やホスト名などとIPアドレスとを対応付けます。

ponsuke-tarou.hatenablog.com

DNSは、「ドメイン名」を受け取ってから「IPアドレス」を返したり、「IPアドレス」を受け取って「ホスト名」を返したりと「ドメイン名やホスト名」と「IPアドレス」の紐付けをしてくれます。
正式名称は、Domain(領域) Name(名前) Systemです。
こんな便利なDNSは、いろんな種類の攻撃を受けます。

令和3年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2」を参考にDNSへの攻撃をお勉強します。

DNSに反射させるDNSリフレクション攻撃

  • 英語 : DNS reflection(反射) attack(攻撃)
  • 別名 : DNSアンプ攻撃(DNS amplification(増幅) attack)、DNSリフレクター攻撃

DNSリフレクション攻撃は、送信元のIPアドレスを偽装してDNSへ大量の問い合わせを行います。
IPアドレスは、攻撃対象のIPアドレスに偽装します。
そうするとDNSは、攻撃対象のIPアドレスに大量の応答を返すので攻撃対象が過負荷に陥ってしまいます。

f:id:ponsuke_tarou:20210922182811j:plain

攻撃者は、②送信元のIPアドレスを偽装した名前解決要求を外部DNSサーバに送ることによって、外部DNSサーバを踏み台とし、攻撃対象となる第三者のサーバに対し大量のDNSパケットを送りつけるというDos攻撃を行える。
(省略)
設問1(2)本文中の下線②の攻撃名称を20字以内で答えよ。>> 答え)DNSリフレクション攻撃

出典:令和3年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2

オープンリゾルバは、知らない人からの問い合わせでも対応してしまいます。

オープンリゾルバは、アクセス制限をしておらず、不特定の相手の問い合わせにも対応してしまうDNSサーバです。
悪い人から踏み台として利用されてしまいます。

オープンリゾルバの中には、 デフォルト設定のままであるなどの理由で、 本来はDNSサーバを意図したものではないにも関わらず、 管理者や利用者が気づかないうちにDNSの応答機能が有効になっているものがあります*4。

オープンリゾルバとなっているサーバやネットワーク機器は、 DDoS攻撃の踏み台になってしまう恐れがあるため、 対策をとることが必要です。

(ご注意)オープンリゾルバの中にはDDoS攻撃の踏み台などに悪用されないように、 対策が取られているものがあります。
オープンリゾルバ(Open Resolver)に対する注意喚起 - JPNIC

IPアドレスの偽装を簡単にできるUDPを使って攻撃します。

UDP(User Datagram Protocol)は、最小限の仕組みでデータを送受信できるようにしているので「リアルタイム性に優れた」反面「IPアドレスの偽装が容易にできる」のです。
DNSリフレクション攻撃では、悪い人が自分のIPアドレスを偽装するのにUDPを使うのです。

UDPの性質を悪用したDDoS攻撃に該当するものはどれか。

  1. (答え)DNSリフレクタ攻撃
  2. SQLインジェクション攻撃
  3. ディレクトリトラバーサル攻撃
  4. パスワードリスト攻撃

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

DNSリフレクション攻撃の踏み台にならないための対策

「令和3年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2」から踏み台にならないための対策を見ていきます。

まずは、「DNSサーバを分離する」です。
「外部DNSサーバ」として名前解決を一挙に請け負っていたサーバを「権威DNSサーバ」「フルサービスリゾルバ」に分けて役割を分担させます。

外部DNSサーバを廃止した上で、DNS-KとDNS-FというDNSサーバをDMZ上に新設し、権威DNSサーバの機能をDNS-Kに、フルサービスリゾルバの機能をDNS-Fに移行することを考えた。

出典:令和3年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2

機能 説明 参考サイト
権威DNSサーバ(コンテンツサーバ) 特定のゾーン情報を持っていて、他のサーバーに問い合わないで名前解決できる インターネット用語1分解説~権威DNSサーバ(authoritative name server)とは~ - JPNIC
フルサービスリゾルバ(キャッシュサーバー) 自分で持っているキャッシュ情報か権威DNSサーバへの合わせで名前解決する JPRS用語辞典|フルサービスリゾルバー(キャッシュDNSサーバー)

DNSサーバを分離した上で、ファイアーウォールのフィルタリングルールを変更して接続を制限します。

(変更前)

項番 送信元 宛先 サービス 動作
5 外部DNSサーバ インターネット DNS 許可
6 インターネット 外部DNSサーバ DNS 許可
... ... ... ... ...
14 全て 全て 全て 拒否

インターネットからフルサービスリゾルバへの問い合わせを受け付けないようにして、何でもかんでも名前解決を受け付けないように制限します。

(変更後)

項番 送信元 宛先 サービス 動作
5 DNS-F(フルサービスリゾルバ) インターネット DNS 許可
6 インターネット DNS-K(権威DNSサーバ) DNS 許可
... ... ... ... ...
14 全て 全て 全て 拒否

DNS再帰的な問合せを使ったサービス不能攻撃(DNS amp)の踏み台にされることを防止する対策はどれか。

  1. (答え)キャッシュサーバとコンテンツサーバに分離し,インターネット側からキャッシュサーバに問合せできないようにする。
  2. 問合せされたドメインに関する情報をWhoisデータベースで確認する。
  3. 一つのDNSレコードに複数のサーバのIPアドレスを割り当て,サーバへのアクセスを振り分けて分散させるように設定する。
  4. 他のDNSサーバから送られてくるIPアドレスとホスト名の対応情報の信頼性をディジタル署名で確認するように設定する。

出典:平成24年 春期 情報セキュリティスペシャリスト試験 午前Ⅱ 問14

f:id:ponsuke_tarou:20210929071830j:plain
ゴールデンウィークのとあるお食事

キャッシュポイズニング攻撃

フルサービスリゾルバ(キャッシュサーバー)では、問い合わせ内容を覚えておきます(キャッシュ)。
こうすることで、内容と同じ問い合わせがまた来た時にキャッシュの情報を送信元へ返して、何度も権威DNSサーバに問い合わせなくて済むようにしています。

このキャッシュを蓄積する機能を利用して、悪い人が嘘の情報をキャッシュとして蓄積されるようにするのがキャッシュポイズニング攻撃です。

DNSキャッシュポイズニングに分類される攻撃内容はどれか。

  1. DNSサーバのソフトウェアのバージョン情報を入手して,DNSサーバのセキュリティホールを特定する。
  2. (答え)PCが参照するDNSサーバに誤ったドメイン情報を注入して,偽装されたWebサーバにPCの利用者を誘導する。
  3. 攻撃対象のサービスを妨害するために,攻撃者がDNSサーバを踏み台に利用して再帰的な問合せを大量に行う。
  4. 内部情報を入手するために,DNSサーバが保存するゾーン情報をまとめて転送させる。

出典:平成29年 秋期 基本情報技術者試験 午前 問37


なぜ、「嘘の情報」をキャッシュとして蓄積されるようにするかというと
「嘘の情報」として偽サイトや偽サーバに誘導して情報を盗もうとするからです。

M社のショッピングサイトにアクセスしていた福岡営業所の社員Aさんから、①「ホームページのリンクをクリックしてショッピングサイトにアクセスしようとしたところ、いつも表示されるショッピングサイトとは違うサイトが表示された。」という報告が東京本社に入った。

平成22年度春期 応用情報技術者試験 午後 問9

DNSキャッシュポイズニング攻撃が成功すると、攻撃対象のフルサービスリゾルバが管理するリソースレコードのうち、メールサーバのAレコードのIPアドレスが、例えば攻撃者のメールサーバのものに書き換えられてしまい、電子メールが攻撃者のサーバに送信されてしまう。

出典:令和3年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2

再帰的な問合せに対しては、内部ネットワークからのものだけに応答するように設定します。

f:id:ponsuke_tarou:20210928071046j:plain

DNSキャッシュサーバに対して外部から行われるキャッシュポイズニング攻撃への対策のうち,適切なものはどれか。

  1. 外部ネットワークからの再帰的な問合せにも応答できるように,コンテンツサーバにキャッシュサーバを兼ねさせる。
  2. (答え)再帰的な問合せに対しては,内部ネットワークからのものだけに応答するように設定する。
  3. 再帰的な問合せを行う際の送信元のポート番号を固定する。
  4. 再帰的な問合せを行う際のトランザクションIDを固定する。

出典:平成29年 春期 応用情報技術者試験 午前 問41

DNSヘッダ内のIDはランダムに変更します。

DNSの問い合わせの仕組みとして、キャッシュサーバは、権威サーバに問い合わせを送る時にIDを合わせて送ります。
権威サーバから応答が返ってきた時に自分が送ったIDと同じIDがメッセージに指定されていれば、正しい応答だと信じます。
自分が送ったIDと違うIDがメッセージに指定されていれば、不正な応答だと思って捨ててしまいます。

https://www.nic.ad.jp/ja/newsletter/No40/images/0800_3.gif
インターネット10分講座:DNSキャッシュポイズニング - JPNIC

なので問い合わせする時に指定するIDはランダムにしておかないと悪い人に悪用されてしまいます。

DNSキャッシュポイズニング攻撃に対して有効な対策はどれか。

  1. DNSサーバで,マルウェアの侵入をリアルタイムに検知する。
  2. (答え)DNS問合せに使用するDNSヘッダ内のIDを固定せずにランダムに変更する。
  3. DNS問合せに使用する送信元ポート番号を53番に固定する。
  4. 外部からのDNS問合せに対しては,宛先ポート番号53のものだけに応答する。

出典:平成28年 春期 情報セキュリティスペシャリスト 午前Ⅱ 問12

カミンスキー攻撃は、進化したキャッシュポイズニング攻撃です。

カミンスキーさんが発見したカミンスキー攻撃は、「ランダム文字列」と「乗っ取り対象のドメイン名」を合わせることで、わざとキャッシュにない情報でフルサービスリゾルバが権威DNSサーバに問い合わせを行うようにします。
そして、すかさず偽情報をフルサービスリゾルバに送りつけることで効率的に偽情報をキャッシュさせます。

https://www.nic.ad.jp/ja/newsletter/No40/images/0800_6.gif
インターネット10分講座:DNSキャッシュポイズニング - JPNIC

再帰的な問合せを行う際の送信元のポート番号をランダム化します。

UDPは、「情報の偽装が容易にできる」できてしまうので、権威サーバのふりをして問い合わせで使用するIDも偽装してくることがあります。

キャッシュサーバから権威サーバへ問い合わせるときに使用するUDPポート番号を、固定あるいは狭い範囲で使用するのではなく、広範囲な番号からランダムに選択して通信に使用することによって、応答パケットの偽装を難しくさせる方法です。偽装の難易度は、ポート番号の利用範囲に比例して難しくなります(図7)。
https://www.nic.ad.jp/ja/newsletter/No40/images/0800_7.gif

インターネット10分講座:DNSキャッシュポイズニング - JPNIC

問い合わせで使用するポート番号をランダム化して「ID + ポート番号」の組み合わせの可能性を広げることで不正な応答を見分けやすくします。

二つ目の対策は、送信元ポート番号をランダム化する対策である。

出典:令和3年度 春期 情報処理安全確保支援士試験 午後Ⅰ 問2

DNSには、ソースポートランダマイゼーションというポートをランダム化する機能がくっついているので有効にしておく必要があります。

■(緊急)キャッシュポイズニング攻撃の危険性増加に伴う
DNSサーバーの設定再確認について(2014年4月15日公開)
~問い合わせUDPポートのランダム化の速やかな確認・対応を強く推奨~

(緊急)キャッシュポイズニング攻撃の危険性増加に伴うDNSサーバーの設定再確認について(2014年5月30日更新)

DNSSECを使って、ディジタル署名によってDNS応答の正当性を確認できます。

DNSSECに関する記述として,適切なものはどれか。

  1. DNSサーバへのDoS攻撃を防止できる。
  2. IPsecによる暗号化通信が前提となっている。
  3. 代表的なDNSサーバの実装であるBINDの代替として使用する。
  4. (答え)ディジタル署名によってDNS応答の正当性を確認できる。

出典:平成24年 秋期 情報セキュリティスペシャリスト試験午前Ⅱ 問18

DNSSECは、正式名称DNS Security(安全) Extensions(拡張機能)で、権威サーバからのDNS応答に電子署名を追加します。

DNSSECについての記述のうち,適切なものはどれか。

  1. DNSサーバへの問合せ時の送信元ポート番号をランダムに選択することによって,DNS問合せへの不正な応答を防止する。
  2. DNS再帰的な問合せの送信元として許可するクライアントを制限することによって,DNSを悪用したDoS攻撃を防止する。
  3. 共通鍵暗号方式によるメッセージ認証を用いることによって,正当なDNSサーバからの応答であることをクライアントが検証できる。
  4. (答え)公開鍵暗号方式によるディジタル署名を用いることによって,正当なDNSサーバからの応答であることをクライアントが検証できる。

出典:平成31年 春期 応用情報技術者試験 午前問40

電子署名を問い合わせ側で検証して、正しい権威サーバからの応答であるかを判断します。

DNSSECで実現できることはどれか。

  1. (答え)DNSキャッシュサーバからの応答中のリソースレコードが,権威DNSサーバで管理されているものであり,改ざんされていないことの検証
  2. 権威DNSサーバとDNSキャッシュサーバとの通信を暗号化することによる,ゾーン情報の漏えいの防止
  3. 長音"ー"と漢数字"一"などの似た文字をドメイン名に用いて,正規サイトのように見せかける攻撃の防止
  4. 利用者のURLの打ち間違いを悪用して,偽サイトに誘導する攻撃の検知

出典:情報セキュリティスペシャリスト試験 午前Ⅱ 問14

f:id:ponsuke_tarou:20210929072159j:plain
青梅の多摩川沿いにあるTeaRoomのマフィンは美味しい

次回の勉強内容

ponsuke-tarou.hatenablog.com

Backlogのフリープランでスペースを作る

Backlogは、見た目が可愛いくて多機能な課題管理ツールです。

backlog.com

Backlogにまつわるいろんな実験をする時に使うスペースが欲しいと思いました。そこで、Backlogのフリープランを使ってみようと思います。

フリープランでできることをおしえてください – Backlog ヘルプセンター を見ると作れるプロジェクトが1つだったり、親子課題を設定できなかったりと制限はあるものの無料でスペースを使わせてもらえるのはありがたい!

フリープランでアカウント作成します。

  1. https://backlog.com/ja/ を表示します
  2. f:id:ponsuke_tarou:20210803184135p:plain
    [プランと料金]を選択します。
  3. f:id:ponsuke_tarou:20210803184349p:plain
    ページの中程にある[フリープランはこちら]リンクで申し込み画面を表示します。
  4. f:id:ponsuke_tarou:20210803190306p:plain
  5. 既に他のBacklogで使っているメールアドレスでアカウントを作成したい場合は、最初に[メールアドレス]を入力します。
    1. f:id:ponsuke_tarou:20210803190541p:plain
      メッセージとリンクが表示されます。
    2. リンクからログインして、申し込み画面を再度表示すると[スペースID][組織名]の入力だけで済みます。
  6. 全ての項目を入力して[無料で試してみる]ボタンで進むとBacklogのスペースができます。
    • 組織名 : ここの入力値はスペース名になります
  7. f:id:ponsuke_tarou:20210803191625p:plain

f:id:ponsuke_tarou:20210803201920j:plain
ザ マンダリン オリエンタル グルメ ショップで食べたケーキ

使い方はヘルプサイトがわかりやすいです。

たくさんの画像付きでわかりやすいので使い方を調べるときはヘルプサイトがおすすめです。 support-ja.backlog.com

APIを使います。

developer.nulab.com

せっかくスペースを作ったので記念にスペース情報の取得 | Backlog Developer API | Nulabをします。 APIの認証で使うAPIキーの取得方法は、APIの設定 – Backlog ヘルプセンタが参考になります。 コマンドでAPIを呼び出すときは、合わせてjqコマンドを使うとレスポンスのJSONが整形されてみやすくなります。

$ curl -X GET https://{スペースID}.backlog.com/api/v2/space?apiKey={APIキー} | jq
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   228  100   228    0     0   1868      0 --:--:-- --:--:-- --:--:--  1868
{
  "spaceKey": "{スペースID}",
  "name": "ぽんすぺーす",
  "ownerId": 5...,
  "lang": "ja",
  "timezone": "Asia/Tokyo",
  "reportSendTime": "00:00:00",
  "textFormattingRule": "markdown",
  "created": "2021-08-03T10:08:17Z",
  "updated": "2021-08-03T10:59:06Z"
}

f:id:ponsuke_tarou:20210803202030j:plain
ザ マンダリン オリエンタル グルメ ショップで食べた流行りもの

外の世界から守ってくれるプロキシ

前回の勉強内容

ponsuke-tarou.hatenablog.com

プロキシは、インターネットとの接続を中継してくれるサーバです。

プロキシは、単に「プロキシ」と言ったり「プロキシサーバ」と言ったりします。

Webアクセスで利用されるプロキシサーバの機能として,適切なものはどれか。

エ. 内部ネットワークのクライアントが外部サーバと通信する場合,中継役となりクライアントの代わりに外部サーバに接続する。

平成17年秋期問56 プロキシサーバの機能|基本情報技術者試験.com

社内ネットワークなど内部とインターネットなど外部の接続を中継してくれます。英語で書くと「proxy」で日本語に訳すと「代理人」になります。

TCP/IPネットワークのフォワードプロキシに関する説明のうち,最も適切なものはどれか。

ウ. Webブラウザの代理として,Webサーバに対するリクエストを送信する。

令和元年秋期問35 フォワードプロキシはどれか|応用情報技術者試験.com

インターネットは楽しいですが、怖い人々がたくさん待ち構えています。 そんな、怖い人々と直接やりとりするのは嫌なのでプロキシさんに代理人としてやりとりしてもらうのです(これはイメージです)。

f:id:ponsuke_tarou:20220315201145j:plain

「接続元」「接続先」によってフォワードプロキシとリバースプロキシがあります。

接続するパソコンが、内部ネットワークにあってインターネットに接続する時に、代理でインターネットに接続してくれるのがフォワードプロキシです。 英語で書くと「forward proxy」で「前方の + 代理人」になります。

Webサーバを使ったシステムにおいて,インターネット経由でアクセスしてくるクライアントから受け取ったリクエストをWebサーバに中継する仕組みはどれか。

エ. リバースプロキシ

https://www.ap-siken.com/kakomon/31_haru/img/35.gif

平成31年春期問35 Webサーバに中継する仕組みはどれか|応用情報技術者試験.com

Webサーバを作る人々にとっては、インターネットから接続し来る人々はどんな怖い人がいるか分からないので怖いものです。 だから、インターネットからWebサーバへの接続の時に代理人を立てます。これがリバースプロキシです。 英語で書くと「reverse proxy」で「反対の + 代理人」になります。

種類 接続元 接続先
フォワードプロキシ 内部ネットワークのクライアント インターネット上のサーバ
リバースプロキシ インターネット上のクライアント 内部ネットワークのサーバ

裁判をする時に訴える人も訴えられる人も弁護士さんを立てます。 訴える人と訴えられる人が、接続元のパソコンや接続先サーバで、弁護士さんがプロキシサーバ、みたいなイメージです(本当にイメージです)。

フォワードプロキシにはいろんな利点があります。

接続元PCの情報を外部に曝さずにインターネットを使えます。

プロキシサーバが接続元PCの代理としてインターネットに接続してくれるのでPC固有のIPアドレスなどの情報を晒さずに済みます。

https://www.infraexpert.com/studygif/security36.5.gif

プロキシサーバとは - infraexpert.com

ユーザー認証機能をくっつければ、認証した人だけがインターネットに接続できます。

プロキシサーバにユーザー認証を実装することで、登録されて認証できた人だけがインターネットを使えるようにすることができます。

キャッシュでよくみるページへのアクセスが速くなります。

プロキシサーバには、表示したページ情報をキャッシュしておく機能があり、同じページを再度表示する場合はキャッシュを使用することで素早くページを表示できます。

https://xtech.nikkei.com/it/article/COLUMN/20071102/286318/zu04_01.jpg

Lesson4:HTTPのやりとりを仲介するプロキシを使った流れを知ろう | 日経クロステック(xTECH)

フィルタリングで、怪しいサイトへの接続を禁止できます。

社内の決まり(ポリシー)に沿って、怪しいサイトへの接続を禁止することでPCへのマルウェアの侵入対策になります。

https://image.itmedia.co.jp/ait/articles/1608/31/sectecmap1.gif

プロキシサーバ/コンテンツフィルタ――ポリシーに合致しないアクセスの防止技術:セキュリティ・テクノロジー・マップ(6) - @IT

情報を一元管理できます。

内部ネットワークにあるPCは、みんなプロキシサーバを経由することになるので各自のインターネット接続情報が一元管理されることになります。 それにより、何か事故や問題が起こった時にプロキシサーバの記録をたどることで調査が可能になります。

リバースプロキシにも利点があります。

リバースプロキシでは、負荷分散を行なったり、プロキシで暗号化・復号を行うことによるSSL通信の高速化を図ることができます。

https://image.itmedia.co.jp/ait/articles/1608/25/wi-fig02.png

リバースプロキシ(Reverse Proxy):90秒の動画で学ぶITキーワード - @IT

f:id:ponsuke_tarou:20210802221445j:plain
板橋区志村の熊野湯

使っているPCに設定されたプロキシサーバを確認してみます。

Macの場合

[システム環境設定] > [ネットワーク] > [Wifi]などのインターフェースを選択 > [詳細]ボタン > [プロキシ]タブ、とたどっていくとみられます。 f:id:ponsuke_tarou:20210802222601p:plain

Windowsの場合

コマンドで確認したい場合は、コマンドプロンプトなどのターミナルを起動してnetsh winhttp show proxと打てばOKです。

# プロキシサーバーを使っていないとこんな感じ
$ netsh winhttp show prox

現在の WinHTTP プロキシ設定:

    直接アクセス (プロキシ サーバーなし)。

画面で見たい場合は、Win + X > [設定] > [Windowsの設定]ダイアログ表示 > [ネットワークとインターネット] > [プロキシ]とたどっていくとみられます。 f:id:ponsuke_tarou:20210803093434p:plain

次回の勉強内容

ponsuke-tarou.hatenablog.com

f:id:ponsuke_tarou:20220315201421j:plain

Kintoneでフィールドが非表示になる時と「アクセス権がありません。」と表示される時の違い

レコードの詳細画面でフィールが非表示になる時と「アクセス権がありません。」と表示される時があります。

f:id:ponsuke_tarou:20210630192402p:plain
こういうフィールドが、フィールドの権限設定によって
f:id:ponsuke_tarou:20210630192310p:plain
こんな感じで表示に違いがあります。

違いは、アクセス権の設定に「フォームのフィールド」を使っているかどうかです。

懇切丁寧に質問サイトに説明が書いてあります。

「フィールドのアクセス権」では、アクセス権を適用するユーザーの設定方法によって、該当ユーザーがアクセスした時の表示が変わります。

よくあるご質問 | フィールドのアクセス権を設定している場合、レコード詳細画面に「アクセス権がありません。」と表示される場合と、フィールド自体が非表示になる場合があります。

実際にやってみました。

理解力が低くてちょっとわからなかったのでやってみました。

使ったアプリは、社員名簿 - kintone(キントーン)- すぐに使えるサンプルアプリ | サイボウズの業務改善プラットフォームをちょっぴりいじったものです。

フィールドのアクセス権がこんな感じの場合

f:id:ponsuke_tarou:20210630192858p:plain

[閲覧]権限があるユーザーの表示

f:id:ponsuke_tarou:20210630191720p:plain

[閲覧]権限がないユーザーの表示

f:id:ponsuke_tarou:20210630193230p:plain

フィールドのアクセス権に「フォームのフィールド」だけ設定しても「アクセス権がありません。」と表示されました。

「フォームのフィールドを追加」から一つでもフィールドを追加して設定した場合

(省略)※ 該当フィールドに対して閲覧権限がないユーザーは、「アクセス権がありません。」と表示されます。

よくあるご質問 | フィールドのアクセス権を設定している場合、レコード詳細画面に「アクセス権がありません。」と表示される場合と、フィールド自体が非表示になる場合があります。

「ユーザー/組織/グループとアクセス権」を設定せず、「フォームのフィールド」だけ設定したらどうなるのだろう?とふと思ったのでやってみました。

f:id:ponsuke_tarou:20210630221512p:plain
フィールドのアクセス権がこんな感じの場合
f:id:ponsuke_tarou:20210630221606p:plain
[閲覧]権限があるユーザーの表示

やはり「アクセス権がありません。」と表示されました。

f:id:ponsuke_tarou:20210630221652p:plain
[閲覧]権限がないユーザーの表示
「フォームのフィールドを追加」から一つでもフィールドを追加して設定した場合は、「アクセス権がありません。」と表示されます。

ポイントは、「フォームのフィールド」

f:id:ponsuke_tarou:20210630193800p:plain f:id:ponsuke_tarou:20210630194047p:plain

f:id:ponsuke_tarou:20210630194320j:plain
港区にあるふれあいの湯

Kintoneで他のアプリからユーザー選択の値を取得する

やりたいこと

とあるアプリで、他のアプリから値を取得して任意のフィールドに設定したいのです。

  1. [社員名簿]アプリでは、「社員名」と「承認者」を紐づけている。
  2. [作業依頼申請]アプリでは、「申請者」とその「承認者」を入れる必要がある。

上記のような状態のアプリがあったとします。 [作業依頼申請]アプリで「承認者」を入力するのはとても面倒くさいので、[社員名簿]アプリから「承認者」を取得して設定したいです。 f:id:ponsuke_tarou:20210622213458j:plain

[社員名簿]アプリ

社員名簿 - kintone(キントーン)- すぐに使えるサンプルアプリ | サイボウズの業務改善プラットフォームを使っています。

f:id:ponsuke_tarou:20210622211206p:plain
[社員名]フィールドというユーザー選択フィールドを追加しています。
今回使うフィールドは以下です。

フィールド名 フィールドコード フィールドの種類
社員名 社員名 ユーザー選択
承認者 承認者 ユーザー選択

[作業依頼申請]アプリ

作業依頼申請 - kintone(キントーン)- すぐに使えるサンプルアプリ | サイボウズの業務改善プラットフォームを使っています。 f:id:ponsuke_tarou:20210622212125p:plain 今回使うフィールドは以下です。

フィールド名 フィールドコード フィールドの種類
申請者 applicant 作成者
承認者 authorizer ユーザー選択

JavaScriptを実装します。

レコード編集を始めるタイミングで処理を起動します。

kintone.events.on([
    'app.record.index.edit.show',
    'app.record.create.show',
    'app.record.edit.show'
], function(event) {

レコード編集を始めるタイミングで処理が動くようにイベントハンドラーを登録します。

イベントハンドラーを登録する

kintone.events.on(type, handler)

イベント処理の記述方法 – cybozu developer network

引数のtypeには以下のタイミングを指定します。

イベントが発生するタイミング イベントタイプ Promise対応
レコード一覧画面 - インライン編集開始 app.record.index.edit.show o
レコード追加画面 - 表示後 app.record.create.show o
レコード編集画面 - 表示後 app.record.edit.show o

表の参考元 : kintone JavaScript API(イベント)一覧 – cybozu developer network

APIの呼び出しを行うので、kintone.Promiseに対応したイベントを使います。

※ この kintone.Promise オブジェクトを return することで、kintone.api() の実行を待ってから次の処理を実行できるイベントがあります。 対応しているイベントはこちらをご参照ください。

kintone REST API リクエスト – cybozu developer network

他のアプリでの検索条件に使う値を取得する。

[社員名簿]アプリから情報を取得する検索条件に使う値を取得します。 処理を「新規作成」「新規作成以外(既に登録されているレコードの編集)」に分岐させています。

if (event.type === 'app.record.create.show') {
    // レコード追加時には、[申請者]フィールドにログインユーザーが設定されていないので、ログインユーザー情報を直接取得する
    user = kintone.getLoginUser().code;
} else {
    // [申請者]フィールドからユーザー情報を取得する
    user = event.record['applicant']['value']['code'];
}

検索条件に使用する[社員名簿]アプリの[申請者]フィールドには[作成者]を使用しています。

https://jp.cybozu.help/k/img-ja/created_by_01.png

レコードを保存したユーザーが自動で設定されるフィールドです。

作成者 - kintone ヘルプ

この[作成者]は、新規作成して初回保存時に設定されるようです。 ということで、「新規作成」の時はログインユーザーから情報を取得するようにしています。

Kintone REST APIで他のアプリからユーザー選択の値を取得する

APIを使って[社員名簿]アプリの[承認者]フィールドを取得します。検索条件は「[社員名簿]アプリの[社員名]フィールドが、[作業依頼申請]アプリの[申請者]フィールドと同じ」です。

let params = {
    app: 11,
    fields: ['承認者'],
    query: '社員名 in ("' + user + '")'
};

表の出典 : レコードの一括取得(クエリで条件を指定) – cybozu developer network

パラメータ名 指定する値 必須 説明
fields 文字列の配列 省略可 レスポンスに含めるフィールドコードを指定します。
省略した場合は、閲覧権限を持つすべてのフィールドの値が返されます。
app 数値又は文字列 必須 アプリのID を指定します。
query 文字列 省略可 レスポンスに含めるレコードの条件を指定するクエリ文字列です。 クエリ文字列内では、後述の演算子とオプションが使用できます。
省略した場合は、閲覧権限を持つすべてのレコードが返されます。

Kintone REST APIの呼び出しで、コールバック関数を指定する方法と省略する方法があります。 ここでは、コールバック関数を省略してkintone.Promise オブジェクトが返却されるようにします。

Promiseを使う利点

レコード作成時などに、処理を待ってからレコードを保存することができる(同期的処理、と呼びます) 「あるアプリAのレコードを保存時、アプリBのレコードを取得し、その値を利用」というようにレコードの保存時などにkintone APIを使って他のデータを取得したり変更したり、同期的に処理することができるようになります。

kintoneにおけるPromiseの書き方の基本 – cybozu developer network

そうすることで、APIを使って[社員名簿]アプリから取得したデータを画面のフィールドに反映させることができます。

return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', params).then( function(resp) {
    // API の呼び出しが成功したら実行される処理...
    return event;
}).catch(function(error) {
    // API の呼び出しが失敗したら実行される処理...
    return event;
});

f:id:ponsuke_tarou:20210622214925j:plain

ソースファイルを登録すれば出来上がりです。

  1. [作業依頼申請]アプリの設定画面を開く
    • f:id:ponsuke_tarou:20210630184357p:plain
  2. f:id:ponsuke_tarou:20210630184514p:plain
    [設定]タブ > [JavaScript / CSSでカスタマイズ]リンクからJavaScriptを登録する画面を表示
  3. [適用範囲]=「すべてのユーザーに適用」を選択
  4. [PC用のJavaScriptファイル]の[アップロードして追加]ボタンで実装したソースファイルをアップロード
  5. f:id:ponsuke_tarou:20210630184802p:plain
    [保存]ボタンで保存
  6. f:id:ponsuke_tarou:20210630184935p:plain
    [アプリを更新]ボタンで適用する

できた!

f:id:ponsuke_tarou:20210630185439p:plain
[社員名簿]アプリにこんなレコードがあると・・・
こんな感じで、[作業依頼申請]アプリでレコードを追加したり編集すると[社員名簿]アプリから「承認者」を取得して自動で設定されるようになりました。 f:id:ponsuke_tarou:20210630185649g:plain

うまくいかなかったこと

APIで取得した結果を設定したのに反映されない!

原因 : ハンドラーが return してないから

return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', params).then(function(resp) {
    // ...省略...
    event.record['authorizer']['value'] = userlist;
}).catch(function(error) {
    console.log(error.message);
});

フィールドの値を書き換える

ハンドラーが record オブジェクトのフィールドの値を書き換えて event オブジェクトを return した場合、その値でフィールドの値を更新します。

  • 最後のハンドラーが return しない場合、フィールドの値を更新しません。

レコード編集イベント – cybozu developer network

原因 : Promiseオブジェクトを使う方法じゃないから

return kintone.api(kintone.api.url('/k/v1/records.json', true), 'GET', params, function(resp) {
    // API の呼び出しが成功したら実行されるコールバック処理
    return event;
}, function(error) {
    // API の呼び出しが失敗したら実行されるコールバック処理
    return event;
});

コールバック関数を指定しており、kintone.Promise オブジェクトは返却されません。 というわけでなのでAPIを呼び出す処理が終わるのを待たずに画面表示処理が進んでしまいました。

このように kintone.api() はコールバック関数を省略するとPromiseオブジェクトが返り値になります。

kintone.api(kintone.api.url('/k/v1/record', true), 'GET', {app: 1, id: 1}); // これでPromiseオブジェクトが生成される

それを return してあげることによってkintone側で app.record.create.submit 時など、処理を待ってくれる仕組みをkintoneは持っています。Promiseオブジェクトを return しないと処理をまってくれないので注意しましょう。(逆に言えば、レコード詳細ページなど、処理を待たせる必要がなければPromiseオブジェクトの return は必須ではありません。)

kintoneにおけるPromiseの書き方の基本 – cybozu developer network

Failed to load resource: the server responded with a status of 400 (Bad Request) - 入力内容が正しくありません。

f:id:ponsuke_tarou:20210622185513p:plain
ブラウザのコンソールにエラーが出力された

  • 事象 : APIの呼び出しでエラー
  • 原因 : APIでの検索条件で文字列が"に囲まれていないから
  • 対応 : "で囲む
/** @type {object} API に渡すパラメータオブジェクト. */
let params = {
    app: 11,
    fields: ['承認者'],
    query: '社員名 in (' + user + ')' // 正解>>> '社員名 in ("' + user + '")'
};

520 (520) - 社員名フィールドのフィールドタイプには演算子=を使用できません。

  • 事象 : APIの呼び出しでエラー
  • 原因 : APIでの検索条件でユーザー選択フィールドに=演算子を使ったから
  • 対応 : ユーザー選択には、innot inを使う
/** @type {object} API に渡すパラメータオブジェクト. */
let params = {
    app: 11,
    fields: ['承認者'],
    query: '社員名 = "' + user + '"' // 正解>>> '社員名 in ("' + user + '")'
};
フィールド又はシステム識別子 利用可能な演算子 利用可能な関数
ユーザー選択 in not in LOGINUSER()

表の出典元 : フィールド、システム識別子ごとの利用可能な演算子と関数一覧 – cybozu developer network

f:id:ponsuke_tarou:20210622214554j:plain
PARADIS小石川本店のケーキ