はてな村定点観測所

運動、瞑想、睡眠、野菜350g

北朝鮮外務省のWebサイトを支える技術

   

北朝鮮外務省のWebサイトを分析してみた

相次ぐミサイル発射や水爆実験で国際社会の平和と安定に挑戦し続けている北朝鮮。

f:id:netcraft3:20170920214112j:plain

今年6月22日には北朝鮮外務省が公式サイト(http://www.mfa.gov.kp/en/)を開設しました。英語で閲覧することが出来ます。北朝鮮政府が対外的なWebサイトを開設するのは異例のことで、今にして思うと現在のミサイル発射などの事態へ突入することを見越した布石だったのかなと思います。

www.zakzak.co.jp

http://www.mfa.gov.kp/en/

f:id:netcraft3:20170920201640p:plain

(北朝鮮外務省サイト)

北朝鮮のトップレベルドメインである.kpを使ったWebサイトは今まで28個確認されていましたが、この外務省のWebサイトが新しく追加されることになりました。

北朝鮮外務省のWebサイトを分析すれば、北朝鮮のWeb関連技術を推し量ることができるのではないかと思いました。簡単にですが、北朝鮮外務省のWebサイトを分析してみました。

北朝鮮外務省サイトのアクセス解析

まず北朝鮮外務省のサイトはどれくらい閲覧されているのでしょうか。あくまで推計値ですが、SimilarWebで調査してみました。

f:id:netcraft3:20170920194543p:plain

先月の訪問者数の推計値は10万8千件と表示されました。これくらいのアクセス規模ならば、越えているブロガーは沢山いると思います。私のブログも先月のSimilarWeb推計値は64万3千件になっています。

f:id:netcraft3:20170920194836p:plain

国別訪問ユーザーの1位はアメリカ、2位はタイ、3位はイギリスでした。隣国の日本・韓国・中国はベスト5には入っておらず意外な結果でした。北朝鮮のWebサイトは欧米圏で人気があるようです。

f:id:netcraft3:20170920195156p:plain

ソーシャルからの流入が多く、検索流入はごく僅かです。サイトが開設されて間もないということもあると思いますが、検索流入が増加するように頑張った方が良さそうです。

f:id:netcraft3:20170920195514p:plain

ソーシャル流入の100%がTwitterからでした。

北朝鮮外務省サイトのHTTPレスポンスヘッダー

北朝鮮外務省のサイトを開いた時のHTTPレスポンスヘッダー情報を見てみましょう。

Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: close
Content-Type: text/html; charset=UTF-8
Date: Wed, 20 Sep 2017 09:24:02 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Link: <http://www.mfa.gov.kp/en/wp-json/>; rel="https://api.w.org/", <http://www.mfa.gov.kp/en/>; rel=shortlink
Pragma: no-cache
Server: Apache

HTTPレスポンスヘッダー情報ではWebサーバーはApacheと出ています。api.w.orgそしてwp-jsonというWordPress4.4以降で挿入されるようになったWP REST APIのヘッダー要素が入っています。HTTPレスポンスヘッダーを見る限りではWordPressで構築されているように見えます。キャッシュ制御はno-cacheになっていて、キャッシュの有効期限は過去の日付1981年11月19日に設定されていました。Webサーバー側でキャッシュ有効期限を定めるのではなくブラウザキャッシュに委ねる判断をしたものと思われます。

北朝鮮外務省サイトのHTMLソース

次にHTMLソースを見ていきましょう。

<meta name=viewport content="width=device-width, initial-scale=1">

ヘッダーにビューポートが記述されていました。ビューポートを記述するとサイトの幅などがデバイスに応じて変わるので、スマホ対策と思われます。

<link rel='dns-prefetch' href='//s.w.org' />

ヘッダーにWordPressのDNSプリフェッチ情報が入っていました。WordPress4.6以降ではこのプリフェッチ情報がデフォルトでヘッダーに挿入されるようになっています。

<link rel='stylesheet' id='fv_flowplayer_admin-css'  href='http://www.mfa.gov.kp/app/plugins/fv-wordpress-flowplayer/css/admin.css?ver=6.0.5.12' type='text/css' media='all' />
<link rel='stylesheet' id='genericons-css'  href='http://www.mfa.gov.kp/app/themes/dprk/genericons/genericons.css?ver=3.4.1' type='text/css' media='all' />
<link rel='stylesheet' id='dprk-style-css'  href='http://www.mfa.gov.kp/app/themes/dprk/style.css?ver=4.7.2' type='text/css' media='all' />

北朝鮮外務省のWebサイトでは、/app/pluginにWordPressのプラグインが入っており、/app/themesにテーマ関連のCSSが入っています。/wp-contentのようなURLパスは見当たりませんでした。WordPressをカスタマイズしているのかリライトを掛けているものと思われます。

<meta name="generator" content="DPRK 1.0" />

metaタグでジェネレーターがDPRK 1.0と記述されていました。WordPressでは通常このジェネレーター情報は"WordPress 4.4.0"のようにWordPress名称とWordPressのバージョン番号が入ります。DPRKは北朝鮮の英語表記の略称と思われますが、DPRK 1.0と銘打たれているのでWordPressをカスタマイズしたCMSの北朝鮮での名称かもしれません。

<script type='text/javascript' src='http://www.mfa.gov.kp/lib/js/jquery/jquery.js?ver=1.12.4'></script>
<script type='text/javascript' src='http://www.mfa.gov.kp/lib/js/jquery/jquery-migrate.min.js?ver=1.4.1'></script>

jQuery.1.12.4が読み込まれていました。北朝鮮の他のサイトを見てもjQueryを使っているサイトは多く見掛けました(朝鮮中央通信、Korean Dishesなど)。

       <script type="text/javascript">
           window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.2.1\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/2.2.1\/svg\/","svgExt":".svg","source":{"concatemoji":"http:\/\/www.mfa.gov.kp\/lib\/js\/wp-emoji-release.min.js?ver=4.7.2"}};
           !function(a,b,c){function d(a){var b,c,d,e,f=String.fromCharCode;if(!k||!k.fillText)return!1;switch(k.clearRect(0,0,j.width,j.height),k.textBaseline="top",k.font="600 32px Arial",a){case"flag":return k.fillText(f(55356,56826,55356,56819),0,0),!(j.toDataURL().length<3e3)&&(k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57331,65039,8205,55356,57096),0,0),b=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55356,57331,55356,57096),0,0),c=j.toDataURL(),b!==c);case"emoji4":return k.fillText(f(55357,56425,55356,57341,8205,55357,56507),0,0),d=j.toDataURL(),k.clearRect(0,0,j.width,j.height),k.fillText(f(55357,56425,55356,57341,55357,56507),0,0),e=j.toDataURL(),d!==e}return!1}function e(a){var c=b.createElement("script");c.src=a,c.defer=c.type="text/javascript",b.getElementsByTagName("head")[0].appendChild(c)}var f,g,h,i,j=b.createElement("canvas"),k=j.getContext&&j.getContext("2d");for(i=Array("flag","emoji4"),c.supports={everything:!0,everythingExceptFlag:!0},h=0;h<i.length;h++)c.supports[i[h]]=d(i[h]),c.supports.everything=c.supports.everything&&c.supports[i[h]],"flag"!==i[h]&&(c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&c.supports[i[h]]);c.supports.everythingExceptFlag=c.supports.everythingExceptFlag&&!c.supports.flag,c.DOMReady=!1,c.readyCallback=function(){c.DOMReady=!0},c.supports.everything||(g=function(){c.readyCallback()},b.addEventListener?(b.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1)):(a.attachEvent("onload",g),b.attachEvent("onreadystatechange",function(){"complete"===b.readyState&&c.readyCallback()})),f=c.source||{},f.concatemoji?e(f.concatemoji):f.wpemoji&&f.twemoji&&(e(f.twemoji),e(f.wpemoji)))}(window,document,window._wpemojiSettings);
       </script>
        <style type="text/css">
img.wp-smiley,
img.emoji {
    display: inline !important;
    border: none !important;
    box-shadow: none !important;
    height: 1em !important;
    width: 1em !important;
    margin: 0 .07em !important;
    vertical-align: -0.1em !important;
    background: none !important;
    padding: 0 !important;
}
</style>

JavaScriptでTwitter絵文字ライブラリ(Twemoji)が読み込まれていました。動画の紹介にTwitter絵文字が使われている箇所などがあるので、そのためと思われます。

<script src="http://www.mfa.gov.kp/app/themes/dprk/js/lightbox.min.js"></script>

画像効果にはLightboxが使われていました。

f:id:netcraft3:20170920210421p:plain

ちなみに画像のパスは/app/uploads/2017/09/MM00259378-300x207.jpgなどのように/app/uploads配下になっています。パスを変更しただけのようですね。

<div class="entry-content">
        </p></p></p>    </div><!-- .entry-content -->

HTMLコードはこの段落閉じタグ3連続のように意味のないタグや閉じ忘れを多数見掛けました。あまりHTMLコードに詳しくない人が記事を書いているのかもしれません。

意外だったのはGoogle Analyticsも含めユーザー行動をトラッキングするようなJavaScriptタグなどは埋め込まれていませんでした。サーバーサイドでアクセス集計は行っていると思われますが、ユーザー行動の詳細なデータが手に入らなくて良いのかなと疑問に思いました。

北朝鮮外務省サイトのrobots.txt

robots.txtではWordPress管理画面のURLと思われるものがDisallowになっていました。

User-agent: *
Disallow: /wp-admin/
Allow: /wp-admin/admin-ajax.php

 

ホスティング情報

Netcraftで見たネットワーク情報は下記の通りです。

f:id:netcraft3:20170920212917p:plain

ホスティング業者はRyugyong-dong Potong-gang Districtと表示されました。Ryugyong-dong Potong-gangは平壌市都心部の西部にある行政区域です。北朝鮮に割り当て済みのグローバルIPv4アドレスは175.45.176.0/22の1024 個しかないので、おそらく行政区域から直接公開しているのかなと思われます。

本当はミドルウェアの種類やバージョン情報も詳細に調べたかったのですが、HTTPのTRACEメソッドでApacheのバージョンを調べたりNmapでポートスキャンしてミドルウェアを調べるのは(北朝鮮はサイバーテロに関与しているというし)怖くてちょっと実施しませんでした。チキン野郎ですみません。

その他の北朝鮮サイト

簡単にですが北朝鮮外務省のwebサイトを見てみました。日本から閲覧できる北朝鮮サイトは他にもあり、デザインに凝ったサイトや日本語で閲覧できるサイトもあります。

f:id:netcraft3:20170920215837p:plain

http://cooks.org.kp/

f:id:netcraft3:20170920220246p:plain

http://kcna.kp/kcna.user.home.retrieveHomeInfoList.kcmsf

この辺ウォッチしていると北朝鮮のWebの最新トレンドがつかめるのかなと思います。継続してウォッチしてみます。