情報セキュリティ

CSPヘッダとFacebook SDK

近年はXSS対策などのためサーバ上でCSPヘッダを付加することが増えている。詳しいことはリンク先に書かれているが,簡単に言うとHTTPヘッダでjavascriptやStylesheetを読み込んで実行する対象を制限することができる。これによって,不正なスクリプトが実行されることを防止しようというものだ。

ところが,Facebookと連携させようとすると,CSPが邪魔をしてしまう。Facebookのsdkはjavascriptの中で更に別のjavascriptを読込み,動的にscriptタグをDOM内に追加するのである。CSPヘッダのscript-srcに’unsafe-inline’を指定することで実行できるのであるが,これではXSSに対して無防備となる。インラインのjavascriptには毎回nonce属性にランダムな文字列を生成してセットし,CSPヘッダにも’nonce-{設定したnonce値}’という文字列を設定した方がよい。ただし,Facebookのようにjavascript内で動的に生成されるscriptタグにnonce属性は設定されていない。そのためにブラウザで読み込まなくなってしまうのである。

CSPによりJavascriptがブロックされている

動かすためには,動的に追加されるscriptタグにnonceを設定する必要がある。facebookのjavascriptを書き換えられればよいのであるが,それはできない。どうするか迷った末に,scriptタグを追加する関数を書き換えてみることにした。

htmlのDOMからheadノードを取得して,そのappendChild()メソッドを書き換えて,子要素を追加する際に追加される子要素にnonce属性を追加してしまおうという作戦である。次のようにhead要素を取得(1行目)して,そのappendChildメソッドの参照を取得ておく(2行目)。そして,head要素のappendChildメソッドに新しくfunctionを定義する(3-6行目)。このfunctionの中では子要素にsetAttributeメソッドを使って”nonce”属性を設定する。その後,2行目で取得しておいた元々のappendChildメソッドの参照を使って,元の関数を呼び出す。

    head = document.getElementsByTagName('head')[0];
    _appendChild = head.appendChild;
    head.appendChild = function(child) {
      child.setAttribute('nonce', "<?php echo $nonce; ?>");
      _appendChild.apply(this, arguments);
    } 

このJavascriptを組み込んで再度Webブラウザで読み込むと,ブロックされずにJavascriptが実行された。


実験に用いたソースファイル(index.php)

<?php
function getNonce() {
  return base64_encode(openssl_random_pseudo_bytes(20)); 
}
function createCSPHeader($nonce) {
   $nonces = array( 
       'default-src' => "'self'",
       'img-src' => "'self' data:",
       'script-src' => "'unsafe-eval' 'strict-dynamic' 'nonce-".$nonce."'" ,
       'style-src' => "'nonce-".$nonce."'"
   );
   $csp = 'Content-Security-Policy: ';
   $delimiter = '';
   foreach($nonces as $key => $value) {
     $csp = $csp.$delimiter.$key.' '.$value;
     $delimiter = ';';
   }     
   return $csp;      
}
$nonce = getNonce();
$csp_header = createCSPHeader($nonce);
header($csp_header);
?>
<!DOCTYPE html>
<html lang="ja">
<head>
    <title>PHP TEST</title>
    <style type="text/css" nonce="<?php echo $nonce ?>">
    .container {
        background-color: #F3F3F3;
        width: 100%;
        height; 100%;
    }
    </style>
    <script nonce="<?php echo $nonce; ?>">
    window.fbAsyncInit = function() {
      FB.init({
        appId   :     'YOUR_APPLICATION_ID',
        cookie  :     true,
        oauth   :     true,
        version :     'v2.9'
      });
    }
    </script>    
    <script nonce="<?php echo $nonce; ?>">
    head = document.getElementsByTagName('head')[0];
    _appendChild = head.appendChild;
    head.appendChild = function(child) {
      child.setAttribute('nonce', "<?php echo $nonce; ?>");
      _appendChild.apply(this, arguments);
    } 
    </script>
    
</head>
<body>
    <div class="container">
        <h1>Hello World.</h1>
        <p>Nonce: <?php echo $nonce; ?></p>
        <p><?php echo $csp_header; ?></p>
    </div>
</body>
</html>
情報セキュリティ

個人/SOHOでも導入可能なLinux用セキュリティソフト

サーバーに限れば広く使われているLinux OSだが,個人やSOHOなどで導入可能なセキュリティソフトの選択肢はあまりない。大手のセキュリティソフトベンダもLinux向けの製品を出してはいるものの,大規模ユーザ向けのものが多く,小規模事業者や個人には手がだせない。

以下の製品は無料または,比較的安価であり,1台から導入可能で,個人でも導入できる。

ESET File Security for Linux

https://www.eset.com/jp/business/server-antivirus/file-security-linux/

ESETはスロバキアの企業が開発したセキュリティソフトである。キヤノンITソリューションズが代理店となっている。同社の価格表によると,新規ライセンスが年間20,000円,更新ライセンスが年間10,000円となっている。

価格表 https://eset-info.canon-its.jp/business/file_security/price.html

Dr.Web

Dr.Webはロシアの企業が開発したセキュリティソフトで,日本語でのサポート対応を行っている。年間3,410円で利用できる。

https://products.drweb.co.jp/home/linux/

Comodo Antivirus for Linux

Comodo Antivurus for LinuxはComodo社が開発したセキュリティソフトで,無料で使用できる。英語の情報に頼ることにはなるが,無料とは思えないクオリティである。

https://www.comodo.com/home/internet-security/antivirus-for-linux.php

ClamAV

ClamAVは無料で利用できる。メールサーバ用に開発されたもののようである。誤検知が多かった印象を持っている。公式の日本語情報はないため,英語のドキュメントを読む必要がある。

http://www.clamav.net/

情報セキュリティ

Linux版セキュリティ対策ソフトDr.Web導入

Linux版のセキュリティ対策ソフトDr.Webを導入してみました。ロシアの会社が開発したものですが,日本にも拠点があり,日本語でサポートを受けられます。価格も年間3410円と安価です。

https://www.drweb.co.jp/

[root]# drweb-ctl appinfo
ConfigD; 1349; RUNNING 1; Installed (ConfigD ScanEngine FileCheck Update ESAgent NetCheck StatD GateD MailD Antispam UrlCheck CloudD MeshD LinuxGUI LinuxSpider LinuxFirewall), Should run (Update), UUID: 52eef68d-78ad-4c72-8d57-d2cea838f819, created: 2021-Sep-04 21:31:31
Update; 2195; RUNNING 1


[root]# drweb-ctl log
2021-Sep-06 12:18:37 ConfigD [1349] Notice: License number 147896597, expires 2022-Sep-08 12:11:08
2021-Sep-06 12:18:37 Update [2195] Notice: Update 11.1.6.2012181656: Ready for service
2021-Sep-06 12:18:38 Update [2195] Notice: Downloaded vrpatch-56.kwo (38842 bytes)
2021-Sep-06 12:18:53 Update [2195] Notice: Downloaded vrpatch-57.kwo (35479 bytes)
2021-Sep-06 12:18:53 ConfigD [1349] Notice: Update: placed “/var/opt/drweb.com/antispam/vrpatch-56.kwo”
2021-Sep-06 12:18:53 ConfigD [1349] Notice: Update: placed “/var/opt/drweb.com/antispam/vrpatch-57.kwo”
2021-Sep-06 12:18:53 ConfigD [1349] Notice: Update: placed “/var/opt/drweb.com/drl/antispam/version2.lst”
2021-Sep-06 12:24:28 Update [2195] Notice: Downloaded vrpatch-58.kwo (35915 bytes)
2021-Sep-06 12:24:28 ConfigD [1349] Notice: Update: placed “/var/opt/drweb.com/antispam/vrpatch-58.kwo”
2021-Sep-06 12:24:28 ConfigD [1349] Notice: Update: placed “/var/opt/drweb.com/drl/antispam/version2.lst”

情報セキュリティ

セキュリティソフトの誤検知

セキュリティソフトのMcAfee製マカフィーリブセーフが,私が作成した暗号化アプリをマルウェアとしてブロックしてくれました。実行ファイルが隔離されてしまいました。中身もすべてわかっていますので,ビルドし直した上で再度インストールして,ホワイトリストに登録しました。幸い,一般に提供しているものではなかったので被害者は自分だけでした。

情報セキュリティ

情報処理安全確保支援士の法定講習終了証

本日,IPAより情報処理安全確保支援士の法定講習(オンライン)の終了証が届きました。集合研修も受けなければいけないのですが,こちらはまだIPAの研修用サイトでスケジュールを検索しても一つも日程が表示されません。コロナ渦で日程調整が難航しているのかもしれません。

情報セキュリティ

情報処理安全確保支援士の法定講習

情報処理安全確保支援士の法定講習のうち,オンライン講習を受講しました。例年4月に始まるのですが,今年は制度改正があったため10月から始まりました。50頁ほどあるオンライン講習を6つ受講する必要があります。相当なボリュームです。

 民法改正や情報処理促進法の改正についても解説されていて,新しい法令に対応できる内容になっていました。

 今年はほかに集合研修も受ける必要があります。新型コロナウイルス感染症の影響により,こちらもオンラインで行うようです。まだ具体的な日程の案内はありません。

情報セキュリティ

電子メールでパスワードを送るべからず

情報セキュリティ意識が高まってきていることは歓迎すべきことであるが,誤った対策が広まってしまっているケースもある。メールの添付ファイルを暗号化するまではよいのだが,問題はそのパスワードの受け渡し方法がかなり杜撰なのである。後から同じメールで送られてくるケースが非常に多い。これはむしろ危険なのでやめてもらいたい。

 まず,添付ファイルが暗号化されていると,PCのセキュリティソフトが機能しなくなる。メールサーバ上で稼働しているセキュリティソフトの場合は,マルウェア等を検知するとサーバ上でそのメールを削除してくれるので,PCの危険を軽減できる。暗号化されたファイルがメールに添付されていた場合,これらをすり抜けてしまう。そして,運がよければ,復号した瞬間に検知されることになる。運が悪ければ,マルウェアの餌食となる。

 もう一つは,パスワードが盗まれる危険があることだ。暗号化されたファイルを盗まれ,かつ,パスワードも盗まれては暗号化した意味がまったくない。同じメールアドレス同士であれば,ずっとその間のやり取りを盗聴していれば,暗号化されたファイルと復号のためのパスワードを両方とも窃取できる。

 安全なのは,メール以外の方法でパスワードを受け渡すことである。SMS,チャット,電話,FAX,郵便など,他の手段でパスワードを通知すれば,かなりリスクを低減できる。公開鍵暗号方式を用いるのがよりよい方法ではあるが,そこまでするほど秘匿性が高くない場合には有効な方法だろう。