※解答はIPAのサイトを引用しておりますが、解説は独自ですので参考程度にご覧ください
(1) 表1中の[a]に入れる適切な行番号を図1中から選び答えよ
答: 13行目
[a]には13行目が入ります。
ディレクトリトラバーサルとは、攻撃者が特別な意味を持つ文字列を入力して不正にディレクトリ操作を行い任意のファイルを指定して意図しない処理をさせる攻撃です。
例えば”..%2f”の%2fは/(スラッシュ)を意味する文字コードになり”../”とプログラムで解釈されます。これはカレントディレクトリの1つ上の階層のディレクトリを指し、このようにすることで本来アクセスさせてはいけないファイルやフォルダにアクセスができてしまます。これを踏まえ解答について考えます。
表1の項番1の指摘事項で”ファイルアクセスに用いるパス名の文字列作成で利用者が入力したデータを直接使用している”とあり、13行目の行である
FileObject newFile(PDF_DIRECTORY + ”/” + clientCode + ”/” + ”DeliverySlip” + inOrderNo + ”.pdf”)
がパス文字列を生成しているコードになるため「13行目」が解答となります。
(2) 表1中の[b]に入れる適切な行番号を図1中から選び答えよ
答: in
まず、図1の10行目、変数stmtのStatementオブジェクトは、SQL文などを使ってデータベースに問合せをするためのクラスです。
Statementオブジェクトは、特定のデータベースとの接続を示すクラスであるConnectionオブジェクトから取得して利用します。
続いて図1の11行目、変数ResultObjのResultSetオブジェクトは、SQL文の実行結果を含むクラスです。ResultSetオブジェクトは、Statementオブジェクトから取得して利用します。
最後に図1の14行目、変数「in」のBufferedInputStreamオブジェクトは、バッファメモリを使いファイルを読み込むためのクラスです。
Statement、ResultSetの2つのオブジェクトはデータベースの接続と問合せに関係し、BufferedInputStreamはファイルアクセスに関係するため、これらを使用した後にオブジェクトを解放せずに、確保したままの状態にしてしまうと余分なメモリを消費したりバグを起こす原因となります。
これが表1の項番3の確保したリソースの解放漏れという脆弱性になります。
対策としてStatement、Connection、ResultSetオブジェクトを使用した場合は必ずclose()メソッドを実行して解放する必要があります。
図1の14行目でBufferedInputStreamは変数「in」で定義されていることがわかりますので解答は「in」になります。
(3) 図2中の[c]、[d]に入れる適切な字句を答えよ
答: [c]WHERE head.order_no = ?
[d]PreparedStatement stmt = conn.preparedStatement(sql)
表1項番1の対策をしたコードが解答になります。
まず、SQLインジェクションとは、WEBアプリケーションにとって想定外のSQL文を実行させてデータベースを不正に操作する攻撃方法です。
例えばWEBアプリケーション内に次のようなSQL文を実行する処理があるとします。
”SELECT * FROM 納品書テーブル WHERE head.order_no = ‘” + inOrderNo + ”’”
このSQL文はWEB画面からの入力値が inOrderNo 部分に代入されてSQLが実行する処理となるため、inOrderNoとして扱う入力値を受け取った場合は、そのinOrderNoの納品書の情報が結果として得られますが、もし入力値が ‘or ‘1’=’1’という文字列の場合、”SELECT * FROM 納品書テーブル WHERE head.order_no = ” or ‘1’=’1′ となり、WHERE句の記述条件が無視され納品書テーブルの全ての内容が抽出されてしまいます。
このようにSQLで意味を持つような文字列を入力をすることでデータベースに問合せを行うSQL文を悪用して意図しない挙動を起こさせることができ攻撃が成立します。
その対策としてSQL文の中で変数の場所を示す部分に記号の?を使い「WHERE head.order_no = ?」とします。
この?部分にはプログラムコードで値をセットしますので、もしSQLで特別な意味を持つような文字列の入力があった場合は除去や無効化などの対処し不正操作を防ぐことが可能となります。
このような方法をプレースホルダと呼び、SQLの実行パラメータに?を記述した動的なSQLはPreparedStatementで実行することができます。
図1の10行目のStatementオブジェクトを使用していますが、Statementは静的なSQLのみしか実行するができませんのでPreparedStatementに書き換える必要があります。
よって解答は[c]WHERE head.order_no = ?、[d]PreparedStatement stmt = conn.preparedStatement(sql)になります。
(1) [e]に入れる適切な変数名を図5の中から選び答えよ
答: [e]orderNo
図4の2行目で”private static String orderNo;”とあります。
先頭のprivateはアクセス修飾子の1種で、自身のクラスからのアクセスのみを許可する宣言になります。(publicは全てのクラスからのアクセスを許可する宣言になります。)
2番目のstaticは変数の一種で、同じクラスで作られたインスタンス同士で共有される変数のことです。
つまり「orderNo」がstatic宣言されていることにより「orderNo」の値は複数の処理で共有されることを表しています。
これにより利用者は、ログインして画面で注文番号(=orderNo)を入力する際に、ほかの利用者がほぼ同時のタイミングで注文番号を入力してしまうと内部で「orderNo」変数の値がほかの利用者の入力内容に上書きされてしまい、別の得意先の注文情報が表示されてしまいます。
よって不具合の原因となる変数は「orderNo」になります。
(2) [f]に入れる適切な字句を英字で答えよ
答: [f] static
設問2 (1)の解説で記載したとおり図4の2行目でorderNoは「static」変数として宣言されています。「static」は同じクラスで作られたインスタンス同士で共有される変数である宣言になります。
よって解答「static」になります。
(3) 下線①の不具合は何と呼ばれるか
答: レースコンディション
「レースコンディション」とは直訳すると競合状態という意味で、複数の処理が同じデータに同時にアクセスした場合に予期しない動作をしてしまう不具合のことです。
例えば今回の問では得意先の利用者Aと利用者Bが同時に注文情報照会機能を利用したことで、利用者Aが入力した注文番号が内部で利用者Bの注文番号に上書きされてしまい、利用者Aの画面に利用者Bの注文情報が表示されるといった不具合になります。
よって解答は「レースコンディション」になります。
(4) 図6中の[g]、図7中の[h]、[i]に入れる字句を英字で答えよ
答: [g]String orderNo [h]new [i]getOrderInfoBean(orderNo)
[g]には「String orderNo」が入ります。getOrderInfoBeanは注文情報を取得するメソッドになります。
レースコンディションの不具合を対策する前は、図4の6行目のとおりgetOrderInfoBeanメソッドに渡す引数は無く、あらかじめsetOrderNoという注文番号を設定するメソッドで設定されたstatic変数のorderNoの値をそのまま利用していました。
対策として、6ページの(1)にあるとおりorderNoはstatic変数として利用せず、代わりにgetOrderInfoBeanで注文情報を取得する際の引数として「String型のorderNo」を渡す仕様に変更します。
よって解答[g]には「String orderNo」が入ります。
[h]には「new」が入ります。new はそのクラスのインスタンスを生成する処理になります。
クラス名 変数名 = new クラス名();という記載になり、newをしてインスタンスを生成し変数名を付けることで、利用が可能な状態となります。
問ではorderInfoBLObjという変数名でインスタンスを生成しています。
[i]には「getOrderInfoBean(orderNo)」が入ります。
[g]の解説で記載したとおり、レースコンディション対策として図4の6行目、getOrderInfoBeanメソッドを呼び出す際は引数にorderNoが必要となりました。
そのため図5の4行目でgetOrderInfoBeanを呼び出す際は、newで生成したorderInfoBLObjインスタンスのgetOrderInfoBeanメソッドにorderNo渡すように変更するためソースコードはgetOrderInfoBean orderInfoBLObj = orderInfoBLObj.getOrderInfoBean(orderNo);となります。
(5) [j]に入れる適切な属性名を図3中から選び答えよ
答: [j]得意先コード
まず、セッションオブジェクトについては4ページの中段で”ログイン処理時に、ログインした利用者IDと利用者IDにひも付く得意先コード及び得意先名はセッションオブジェクトに保存されている”とあります。
また、図3の注文ヘッダーテーブルには得意先コードが格納されていることがわかります。この2つにはどちらも「得意先コード」があり、これを完全一致の条件とすることで、意図しない別の注文情報が抽出されてしまうことを防ぐことができます。
よって解答の[j]には「得意先コード」が入ります。
答: [a] パッシブ
FTPにはアクティブモードとパッシブモードの2つの接続モードがあります。
アクティブモードは、FTPサーバからFTPクライアントへコネクションを確立(接続)する方式で、パッシブモードでは、FTPクライアントからFTPサーバへコネクションを確立(接続)する方式です。
FTPサーバは、FTPプロトコルを使用してファイルの送受信を行うファイルを管理する側のサーバになるため、この構成では製造管理サーバがFTPサーバに該当し、本社にあるDBサーバがFTPクライアントに該当します。
8ページの文中で”DBサーバから製造管理サーバに”とあるので、FTPクライアントからFTPサーバへのコネクション確立ということになるため解答は「パッシブモード」になります。
(1) 本文中の[b]に入れる適切な字句を答えよ
答: [b] コミュニティ
[b]には「コミュニティ」が入ります。SNMPv2cではpublicという文字列をSNMPコミュニティ名として指定することで機器のバージョン情報を取得することができます。
publicはデフォルトで設定されているコミュニティ名になります。
SNMPコミュニティとは、SNMPで管理するネットワークシステムの範囲のことで、SNMPマネージャと SNMPエージェントとの間で同じコミュニティ名にすることで情報を共有できます。
SNMPv3では、SNMPv1やSNMPv2cで利用されていたSNMPエージェント、SNMPマネージャという名称が廃止され、SNMPエンティティに統一されました。
(2) 本文中の[c]に入れる字句を”バインド”又は”コネクト”から選び答えよ。また下線①についてMさんがそのように判断した理由を表1~表3の各表から一つずつ示したうえで答えよ
答: [c] バインド 【理由】2-3によって起動した3-3ポートへの通信が1-3で拒否されているから
10ページの中段で”攻撃者は一度srvの[c]モードでC&Cサーバとの接続に失敗”とあります。
表2のpsコマンド実行結果より、攻撃者が最初にsrvのコマンドを実行したのは項番「2-3」と考えられます。
項番「2-3」のコマンドラインの内容から「bindモード」でIPアドレスが0.0.0.0、8080番のポートで接続を待ち受けようとしていたことが分かります。
※0.0.0.0はデフォルトルートと呼び任意のIPアドレスを表します。8080ポートはHTTP接続のポートになります。
次に表3をみると項番「3-3」のPIDは表2の項番2-3と同じ1275のプロセスIDであり、外部IPアドレスが0.0.0.0で、8080番ポートの状態がLISTENとなっています。
LISTENの意味は通信を待ち受けている状態で、利用可能な状態、つまりsrvによる通信が失敗したことがわかります。
最後に表1のFWログから上記コマンド実行時の通信ログを探すと送信元がグローバルIPアドレスであるa0.b0.c0.d0(C&CサーバのIPアドレス)、8080番ポートへ送信している通信が項番「1-3」で記録されており、通信が拒否されていることが分かります。
よって通信が失敗したと判断した理由は「2-3によって起動した3-3ポートへの通信が1-3で拒否されているから」になります。
(3) 本文中の[d]に入れる字句を”バインド”又は”コネクト”から選び答えよ。また下線②についてMさんがそのように判断した理由を表1~表3の各表から一つずつ示したうえで答えよ
答: [d] コネクト 【理由】2-4によって開始された3-4の通信が1-4で許可されているから
10ページの中段で”攻撃者は一度srvの[c]モードでC&Cサーバとの接続に失敗した後、srvの[d]モードでC&Cサーバとの接続に成功した”とあります。
表2のpsコマンド実行結果より、攻撃者が2回目にsrvのコマンドを実行したのは項番「2-4」と考えられます。
項番「2-4」のコマンドラインの内容から「connectモード」で自身のグローバルIPアドレスであるa0.b0.c0.d0(C&CサーバのIPアドレス)、443番のポートで自ら接続をしようとしていたことが分かります。
※443ポートはHTTPS接続のポートになります。
次に表3をみると項番「3-4」のPIDは表2の項番2-4と同じ1293のプロセスIDであり、外部IPアドレスがa0.b0.c0.d0で、443番ポートの状態がESTABLISHEDとなっています。
ESTABLISHEDの意味はTCPコネクションが確立され、データ通信ができる状態、つまりsrvによる通信が成功したことがわかります。
最後に表1のFWログから上記コマンド実行時の通信ログを探すと宛先がグローバルIPアドレスであるa0.b0.c0.d0、443番ポートへ送信している通信が項番「1-4」で記録されており、通信が許可分かります。
よって通信が失敗したと判断した理由は「2-4によって開始された3-4の通信が1-4で許可されているから」になります。
(4) 本文中の[e]に入れる適切な数を表2中から選び答えよ
答: 1365
ポートスキャンとはサーバーの各ポートへデータを送信し、その応答から稼働状況を調べる方法です。
表2のpsコマンド実行結果より、「項番2-4」でC&Cサーバとの接続に成功したあとにコマンドラインの内容から192.168.0.1-192.168.255.254の範囲でポートスキャンを実行したと考えられます。
よって解答となるPIDは「1365」となります。
(1) 下線③についてAレコードではこのような攻撃ができないがTXTレコードではできる。TXTレコードではできる理由をDNSプロトコルの仕様を踏まえて答えよ
答: TXTレコードには任意の文字列が設定できるから
TXTレコードは、DNSレコードの一種で、ホスト名の付加情報を自由に定義できるテキスト形式のファイルになります。
TXTレコードの内容は、ドメインに関する情報を提供するため、外部ネットワークからも内容を読み取ることができてしまい下線③のように外部のDNSサーバからTXTレコードのリソースデータを取得し、「TXTレコードに任意の文字列が設定」して悪用する攻撃が可能となってしまいます。
よって解答は「TXTレコードには任意の文字列が設定できるから」になります。
(2) 下線④について適切でない理由を答えよ
答: 稼働しているファイルと内容が異なる可能性があるから
10ページ下段の調査内容より、攻撃者の不正アクセスにより侵害された受付サーバが起動時にDNSリクエストを発行し、攻撃者の用意したC&CサーバにTXTレコードを問合せ、C&Cサーバから受付サーバにTXTレコードを回答しその情報により、攻撃者の用意した不正なファイルを受付サーバにダウンロードさせる動作をしていたことがわかります。
図2のURLはそのときに受付サーバで実行されたコマンドになりますが、この実行コマンドのURLへアクセスしてダウンロードした場合、調査の時点では攻撃者の手により、すでにC&CサーバのIPアドレスが変えられていたり、ファイルが差し替えられている可能性があり解析対象として適切ではなくなってしまいます。
よって解答は「稼働しているファイルと内容が異なる可能性があるから」になります。
(3) 本文中の[f]に入れる適切なサーバ名を答えよ
答: 受付サーバ
設問3の(2)の解説で記載したとおり、調査対象とするのは、実行コマンドのURLへアクセスしてダウンロードしたファイルではなく、「受付サーバ」内に実際にダウンロード済のlogdファイルになります。よって解答は「受付サーバ」になります。
(1) 本文中の[a]~[c]に入る適切な字句を記号で答えよ
答: [a]ア.Lサービス [b]イ.PCのWebブラウザ [c]ウ.SaaS-a
SAMLとは、シングルサインオン(SSO)を実現する仕組みの一つで異なるインターネットドメインの間でユーザーの認証情報をやり取りすることが可能です。
SSOを実現する仕組みはSAMLの他に、証明書認証方式やエージェント方式、リバースプロキシ方式などがあります。
SAMLでは13ページの図2の[a]~[c]にあるように、3つの機器それぞれの役割が存在します。
1つめはサービスを利用者、2つめサービスを提供するサーバ、3つめは利用者の認証機能をもつサーバです。
上記を踏まえ図2にしたがって、SAML認証の手順を説明します。
まず最初の(1)サービス要求では、サービスを利用したい者がサービスを提供するサーバへこのサービスを使わせてくださいと要求を出します。
つまり「PCのWEBブラウザ」がサービス利用者に該当し、業務サービスを提供している「SaaS-a」がサービスを提供するサーバに該当します。
続いて(2)、(3)の認証要求では、サービスを提供するサーバである「SaaS-a」が、認証機能を持つサーバ宛にこの利用者にサービスを利用させてもよいか認証してもらいます。
この認証機能を持つサーバは、図1より認証機能を持つサーバである「Lサービス」になります。
(4)~(7)では、「Lサービス」が利用者情報を用いて認証を行い、認証に成功、失敗した情報を「SaaS-a」へ送り、それを受け取った「SaaS-a」は利用者の「PCのWEBブラウザ」へ認証可否に応じた画面を表示させます。
よって解答は[a]ア.Lサービス [b]イ.PCのWebブラウザ [c]ウ.SaaS-aになります。
(2) 下線①について利用できない理由を具体的に述べよ
答: 送信元制限機能で、本社のUTMからのアクセスだけを許可しているから
表1でLサービスの送信元制限機能という機能が有効になっており、表外の注釈2)で”本社のUTMのグローバルIPアドレスを送信元IPアドレスとして設定している。設定しているIPアドレス以外からのアクセスは拒否する設定にしている”とあります。
そのため、Lサービスの利用者IDとパスワードを使って社外からログインしようとしてもこの機能によりアクセスが拒否されます。
よって解答は「送信元制限機能で本社のUTMからのアクセスだけを許可しているから」になります。
(1) 本文中の[d]~[f]に入る適切な字句を記号で答えよ
答: [d] ア.Pサービスのサーバ証明書 [e] ウ.認証局の証明書 [f] イ.信頼されたルート証明書
表3の項番2でPサービスは送信元からのTLS通信を復号して、マルウェアスキャン実施し、その後に再度暗号化して送信先に送信すると書かれています。
このときの再暗号化については「Pサービスのサーバ証明書」を用いて行います。
するとこの再暗号化された通信を受け取った送信先のPCでは、”信頼されていない証明書”というセキュリティ警告やエラーが表示される問題が発生します。
理由は想定していた送信元の証明書ではなく「Pサービスのサーバ証明書」で通信が暗号化されており、この証明書を発行した認証局(CA)が不明であり公的な機関が発行した証明書ではないと判断されるからです。
この問題の解決方法として、「Pサービスのサーバ証明書」を発行する「認証局の証明書」を「信頼されたルート証明書」としてすべてPCにインストールすることで信頼できるサーバの証明書とPCが判断できるようになるため解決すること可能です。
よって解答は[d]に「ア.Pサービスのサーバ証明書」、[e]に「ウ.認証局の証明書」、[f]に「イ.信頼されたルート証明書」が入ります。
(2) 本文中の[g]に入る適切な字句を記号で答えよ
答: [g] イ.CASB
ア.CAPTCHA(キャプチャ)…スパム対策のための認証の仕組みです。ロボットによる不正ログインの対策として ユーザ情報を入力するWebサイトで使用されます。
イ.CASB…2012年に調査会社であるアメリカのガートナー社が提唱したクラウドサービスを可視化や制御して利活用する際の情報セキュリティ企業や組織に対する基本的な考え方を示したポリシーです。CASBには、主要機能として可視化、コンプライアンス、データセキュリティ、脅威防御の4つが備わっています。
ウ.CHAP…PPPなどで利用される認証方式のひとつで、チャレンジと呼ばれる乱数を使用することでユーザー名やパスワードの漏洩を防止する仕組みになります。
エ.CVSS…「CVSS基本値」、CVSS現状値、CVSS環境値の3つの値で脆弱性の深刻度を評価する仕組みのことです。
オ.クラウドWAF…クラウド上で動作するWAF(WEBアプリケーションファイアウォール)のことで、これを設置することで通信をリアルタイムで監視でき、不正な通信を検出、遮断し、WebサイトやWebアプリケーションをへの通信を可視化や保護できる機器のことです。
表3の項番5の機能概要で、”クラウドサービスの利用状況の可視化”とありますので解答は「イ.CASB」になります。
(1) 表4中の下線②について見直し前と見直し後のアクセス方法の違いを答えよ
答: プロキシサーバではなくPサービスを経由させる
14ページの中段に記載があるとおり、”在宅勤務の導入により各従業員宅のネットワークから本社のサーバにアクセスしてもらう”とありますが、これにより本社のサーバに従業員がアクセスすることになり、表2の要件1”本社のインターネット回線をひっ迫させない”要件を満たすことができなくなります。そこで14ページの下段にあるとおりPサービスを経由する方法に見直しを行いました。
見直し前は12ページで営業所のPCのWebブラウザからインターネットへのアクセスは本社のプロキシサーバを経由するとあり、本社のプロキシサーバを経由させずにPサービスを経由させる構成に変更に見直しを検討する必要があります。
よって解答は「プロキシサーバではなくPサービスを経由させる」となります。
(2) 表4中の下線③についてLサービスに追加する設定を答えよ
答: 送信元制限機能で、営業所のUTMのグローバルIPアドレスを設定する
設問1の(2)の解答より、Lサービスの送信元制限機能で、本社のUTMのグローバルIPアドレスを送信元IPアドレスとして設定されています。
また、表1の注1)でIPアドレスは複数設定できることが分かります。
営業所のPCからインターネットへの通信は営業所のUTMを経由するための送信元IPアドレスは営業所のUTMのグローバルIPアドレスになります。
そのため、Lサービスの「送信元制限機能で、営業所のUTMのグローバルIPアドレスを追加する設定」をすれば良いことになります。
(3) 表4中の下線④について選択する方式を(ア)、(イ)から選んで記号で答えよ
答: (イ)
表4の要件2の中で”多要素認証を有効にする”とあります。多要素認証とは、認証の3要素である「知識情報(ID・パスワード)」、「所持情報(PC・ICカード・スマートフォン)」、「生体情報(顔・指紋・虹彩)」のうち、2つ以上を組み合わせて認証することを指します。
Q社が想定した利用者以外からの不正アクセスを遮断することが目的になります。
すでにLサービスへのログインでID・パスワードで認証をしており、上記のうち知識情報認証は行われていることなります。
さらに多要素認証で、2つめの認証要素として所持情報で認証を行います。
選択肢の(ア)スマートフォンによるワンタイム認証とは、使い捨てのパスワードを任意の連絡先に送信する認証方法で、この方法ではQ社以外の利用者でも自身の電話番号を入力すればワンタイムパスワード認証ができてしまい効果がありません。
一方で(イ)TLSクライアント認証は、用意したクライアント証明書がインストールされている正当なPCのみアクセスさせる認証方法になります。
よって(イ)を選択することで、Q社が用意したクライアント証明書がインストールされている端末のみに送信元を制限することが可能になり多要素認証でセキュリティを高めることが可能となります
(4) 表4中の[h]、[i]に入れる適切な数字を答えよ
答: [h]6 [i]2
[h]には「6」が入ります。表3の要件3で”R-PCから本社のサーバにアクセスできるようにする。ただしUTMのファイアウォール機能にはインターネットからの通信を許可するルールを追加しない”とあります。表3の項番6のリモートアクセス機能で”社外から社内にアクセスできる”とあります。よって解答は「6」が入ります。
[i]には「2」が入ります。表3の要件4で”HTTPS通信の内容をマルウェアスキャンする”とあります。これに対しては表3の項番2のマルウェアスキャン機能で文字通りマルウェアスキャンが可能となります。よって解答は「2」が入ります。
(2) 表5中の[あ]、[い]に入れる適切な数字、[j]~[o]に入れる適切な字句を答えよ
答: [あ]4 [い]3 [j]https://△△△.-a.jp/ [k]研究開発部の従業員
[l]許可 [m] 外部ストレージサービス [n] 全て [o] 禁止
表4の要件5の目的は、表4の要件3、4の機能を使うとあります。つまり表3の項番6のリモートアクセス機能と項番2のマルウェアスキャン機能を使います。
内容にあるとおり”社外から社内にアクセスできること””HTTPS通信の内容をマルウェアスキャンする”ことを可能にすることです。
まず番号1について、社外から許可した端末のみが社内を経由してにSaaS-aへのアクセスを許可するルールについて考えます。
指定されたURLへ指定された利用者IDからの通信だけを許可する機能が必要となり、これは表3の項番4、PサービスのURL単位フィルタリング機能を使って実現することができます。
よって[あ]には「4」が入ります。
項番4のURL単位フィルタリング機能の概要は表3にあるようにアクセス先のURLのスキームからホストまでの組に対し、許可や遮断ができます。
スキームからホストまでとは、表3の注1にあるように、”https://▲▲▲.■■■/”のようにhttps://から最初の”/”までのことです。
図1でSaaS-aは”https://△△△.-a.jp/から始まる”と書いてあるので、社外からSaaS-aだけの宛先へのアクセスを許可するように[j]には「https://△△△.-a.jp/」が入ります。
続いて利用者IDにはSaaS-aへログインするためのLサービスの利用者IDとなりますが、図1の表記で”SaaS-aは、研究開発部の従業員が利用する。それ以外のSaaSは全従業員が使用する”とありますので研究開発部の従業員に限定させる必要があります。
よって[k]には「研究開発部の従業員」が入ります。
また、以上の説明より[l]のアクションは「許可」が入ります。
次に番号2についてです。番号1以外、つまり「研究開発部の従業員」以外の利用者は、社外からSaaS-aへ一切アクセスさせない設定となります。
図1の表記で”SaaS-aは、研究開発部の従業員が利用する。それ以外のSaaSは全従業員が使用する”とありますのでSaaS-aにある「外部ストレージサービス」については「全て」の利用者IDを「禁止」する設定が必要となります。
表3の項番4のURL単位フィルタリング機能を使った場合、アクセス先のURLのスキームからホストまでしか指定ができず、この範囲に当てはまらない場合は「外部ストレージサービス」へアクセスが許可されてしまいます。そこで項番3の「URLカテゴリ単位フィルタリング機能」を使い、カテゴリで「外部ストレージサービス」を指定します。
よって[い]には「3」、[m]に「外部ストレージサービス」、[n]に「全て」、[o]に「禁止」が入ります。