情報技術」カテゴリーアーカイブ

Updater.classマルウェアの本体部分の考察

この記事はUpdater.classファイルがダウンロードする
kernel-certs-debug4917.logファイルを簡単にのぞき見を行い、
考察を行った。

はじめに

筆者は専門家では無く、
リバースエンジニアリングを隅々まで行ったわけではない。
本記事内には見当違いな場所もあると思われる。

外部との通信

URLは踏めないようにしているが無害化は行っていない。
間違ってアクセスしないように十分注意すること。

このプログラムは下記と接続を行う:
http://t23e7v6uz8idz87ehugwq <dot> skyrage <dot> de/version
http://t23e7v6uz8idz87ehugwq <dot> skyrage <dot> de/qqqqqqqqq
ssl://qw3e1ee12e9hzheu9h1912hew1sh12uw9 <dot> skyrage <dot> de:17929

実際の通信内容はAny.Runからpcapをダウンロードできるためそれを見ていただいたほうが良いとは思うが、qqqqqqqqqはjarファイル (VirusTotal)で、versionは数値データ (921) の入ったテキストファイルであった。

ssl通信について

SSL通信であるため中の通信は覗けなかったが、プログラムを確認した知人がいうには独自仕様の通信ではないかとの意見があった。

サーバ側の証明書は下記のものが利用されていた。

> openssl x509 -in key.crt -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            26:aa:65:34:32:16:cf:c8:08:16:02:73:56:b8:4f:13:d8:73:77:7f
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd
        Validity
            Not Before: Jul 18 16:25:40 2022 GMT
            Not After : Jul 15 16:25:40 2032 GMT
        Subject: C = AU, ST = Some-State, O = Internet Widgits Pty Ltd
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:ab:5a:5d:ae:36:ed:5f:21:43:a3:32:c3:a7:66:
                    4b:43:97:4a:ee:61:c2:d2:30:2d:13:4e:02:a3:8d:
                    1b:89:4e:13:15:be:4b:d6:82:7f:44:ae:3d:4a:a7:
                    b1:50:5a:f2:6a:76:a6:55:f9:1a:1e:84:de:e5:a8:
                    56:60:8b:40:11:21:bb:dc:79:56:f9:fc:b7:7b:28:
                    ca:16:a6:37:cf:a4:4e:a6:de:d6:07:6c:8b:88:20:
                    df:b0:3b:69:70:43:a2:46:fe:2d:76:63:bb:2b:bf:
                    97:bb:03:1f:1c:a3:46:3e:9d:40:c8:21:61:98:4f:
                    ce:95:84:b0:35:f2:da:8d:1d:ef:7c:9d:ec:a9:61:
                    ce:8d:b0:f8:50:bd:8a:69:b3:66:80:e6:31:10:b1:
                    b4:00:c2:51:0e:e7:30:d9:34:c7:26:38:07:50:50:
                    75:82:a3:e6:97:56:e6:26:ef:5f:0d:d3:bc:7c:61:
                    2f:f4:d6:55:96:3e:a0:ed:c4:19:ee:42:aa:7d:f1:
                    2b:43:e2:20:4a:5c:31:99:d0:84:a5:82:30:3f:ca:
                    42:84:94:3d:ac:3f:eb:a1:ac:81:c5:02:d0:cd:ee:
                    83:99:a8:7d:26:74:a6:65:e0:16:6f:81:5d:f7:64:
                    8a:fe:ed:3f:cc:08:06:4c:a7:b3:1b:b4:7d:da:7b:
                    17:33
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                50:D7:07:2A:09:4A:78:A7:FF:88:45:84:6F:B5:42:BC:DF:C1:51:6C
            X509v3 Authority Key Identifier:
                keyid:50:D7:07:2A:09:4A:78:A7:FF:88:45:84:6F:B5:42:BC:DF:C1:51:6C

            X509v3 Basic Constraints: critical
                CA:TRUE
    Signature Algorithm: sha256WithRSAEncryption
         0a:d3:f9:c6:20:ad:69:c7:44:42:ae:95:5c:bb:4a:b5:47:ba:
         98:03:e2:20:a0:8c:cc:fb:77:15:dc:ac:4d:be:f4:5c:05:38:
         ed:a3:87:b5:15:2d:8d:b6:a6:00:8b:76:f7:82:71:ae:af:7e:
         01:36:cf:6b:27:cd:f5:06:3e:c3:54:13:a4:a0:07:50:00:e6:
         46:98:20:41:bf:32:ae:c9:42:56:81:f5:e2:07:e1:d7:7d:52:
         20:e4:81:a6:df:f9:4c:06:ef:a0:fd:7e:0a:ec:a6:4e:bc:ed:
         03:42:1f:d4:cb:e9:79:b9:b4:d3:9f:8d:1b:58:52:d2:b1:d2:
         94:02:8b:ed:07:43:18:3e:c8:65:c5:dd:cc:64:a5:23:99:a9:
         44:f8:5f:3f:6e:2a:fe:9f:4c:e3:26:d5:19:27:51:a7:7a:d6:
         77:9d:11:b3:4f:a0:90:1a:6b:c6:de:c8:6f:f6:33:83:4c:3b:
         11:8f:1b:11:3e:0a:07:15:5e:5e:43:ce:4e:70:e5:90:cf:84:
         b7:43:ff:03:fe:fd:6e:fb:ee:fb:1a:ec:7e:17:ec:20:36:cc:
         87:5c:a3:57:21:5b:29:9e:71:d9:aa:50:f6:a7:ed:57:97:7b:
         8b:34:2a:8d:64:79:9b:eb:f7:89:52:39:95:17:8c:f1:3a:a9:
         46:da:a0:a7

自己署名されたものであり、CAが設定されていない。

ST = Some-Stateとなっているところはおそらく詰めが甘かった部分ではないかと思う。

そして、おそらくこの通信がこのプログラムのキーとなる部分ではないかと考える。

被害を抑える方法

今回のプログラムが実行された際の被害を抑える方法としては、
– サーバがアクセスするFQDN, IPをホワイトリスト制にする
– DNSなどでそもそも引っかからないようにする
– 指定されたDNS以外への通信をリジェクトする
– SSL通信をすべてInspectし、CA証明書のチェックも強制する
– FortiGateのライセンスがない機材でも、当該の設定を導入したところ通信がクローズされるようになった

などが考えられる。

また、現状主要な商用エンドポイントセキュリティソフトでの検知が可能であるため、サーバ上に商用のエンドポイントセキュリティを入れ、定期的なスキャンを掛けることでも早期発見につながった可能性がある。

Updater.classマルウェアの自己増殖について

この記事ではリバースエンジニアリングというより自己増殖の過程をお見せします。

ここでいう.logファイルは
VirusTotal上のこちらのファイルの事を指します。

検証環境

  • Docker
  • mcr.microsoft.com/openjdk/jdk:17-ubuntu

はじめに

実際にサーバアプリケーションを使いプラグインを感染させた挙動は、
Any.Runでご確認いただけます。

実際に実行した際のログ
はGistに張っておきます。
空のZipファイルを入れていた関係でエラーだらけですが、
書き換え対象のファイルは判別できるかと思います。

筆者はセキュリティ専門家ではありません。
見当違いなことを言っている箇所が多いと思います。

挙動

挙動はとてもシンプルです。
HDD内のすべてのjarファイルに対して、変更を試みます。
ファイルを直接writeでオープンするのではなく、
同じディレクトリ内に.tmpで終わるファイルを作ってからそれを上書きコピーして保存を行うため、Any.Run上では上書き扱いの警告が出ていません。

プラグイン別の実装

完全にコードを読んだわけではありませんが、
少なくとも下記をincludeしているものに対しては特殊な書き換えを行うようです。

  • net/labymod/api/LabyModAddon
  • onEnableに対し、書き換えを実施
  • net/md_5/bungee/api/plugin/Plugin,
    org/bukkit/plugin/java/JavaPlugin
  • onLoadもしくはonEnableにインジェクション

リバースエンジニアリングについて

やはり難読化されています。

今回記事で取り扱っているものは、
JADXで解析できたうち、mainメソッドから簡単に追えた範囲のみです。

被害を防ぐために

今回のマルウェアは
MCAntiMalware
で検知可能でした。
また、自己増殖をするため、ファイルのハッシュを厳格にチェックする機構や、
厳しいACLと監査ログがあれば、同じように被害を防げた可能性があります。

Kea DHCPをSamba ADDCのDDNSとHot-standby HAで構築した話

前提

  • Ubuntu 22.04
  • Kea 2.2.0

Kea DHCPをインストールする

ISC公式が用意しているリポジトリからKeaをインストールしてください。

2022/12/26日時点で、
https://cloudsmith.io/~isc/repos/
で公開されており、
最新バージョンである2.2.0はこちらからアクセスできます。

Samba AD DCと連携させる

Samba AD DCのDNS機能を使い、DDNS風の動作をさせる例です。

設定スクリプトの準備

dhcp-dyndns.sh

/etc/kea/kea-dhcp-dyndns.sh
に保存してください。

また、スクリプト内の設定を必要に応じて変更してください。

hooks librariesの設定をする

下記のような設定を投入してください。

"hooks-libraries": [
    {
        "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_run_script.so",
        "parameters": {
            "name": "/etc/kea/kea-dhcp-dyndns.sh",
            "sync": false
        }
    }
]

ドメインに参加させる

必要パッケージをインストールする

apt install winbind krb5-user samba

netコマンドが実行できれば成功です。

smb.confを記述する

[global]
   kerberos method = secrets and keytab
   realm = YOUR.DOMAIN.EXAMPLE.COM
   workgroup = YOUR
   security = ads

参加コマンドを打つ

Administratorユーザで参加する場合は下記のコマンドで参加できます。

net ads join -U Administrators

DNS編集ユーザを作る

パスワードは利用しないのでランダムで設定。

ユーザ名と説明文はお好みで。

samba-tool user create dhcpduser --random-password --description='Unprivileged user for DNS updates via ISC DHCP server'
samba-tool user setexpiry dhcpduser --noexpiry
samba-tool group addmembers DnsAdmins dhcpduser

keytabを出力

Samba AD DCが動いているマシン上で下記のコマンドを実行し、
dhcpduser.keytab
を入手します。

samba-tool domain exportkeytab [email protected] dhcpduser.keytab

入手したkeytabファイルはDHCPサーバの/etc/dhcpduser.keytabにコピーしてください。

権限の設定を忘れずに行ってください。

HA構成を作る

前提パッケージをインストールする

apt install isc-kea-ctrl-agent

リモート接続設定を変更する

/etc/kea/kea-ctrl-agent.confを編集します。

http-host0.0.0.0(もしくは適切な値)に変更してください。

HA設定を追加する

下記の設定を適宜変更して投入する。

libdhcp_lease_cmdsを入れないと正常に動かない(リース情報を共有できない)ので注意。

"hooks-libraries": [
    {
        "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_lease_cmds.so",
        "parameters": { } 
    },
    {
        "library": "/usr/lib/x86_64-linux-gnu/kea/hooks/libdhcp_ha.so",
        "parameters": {
            "high-availability": [{
                "this-server-name": "dhcp01",
                "mode": "load-balancing",
                "heartbeat-delay": 10000,
                "max-response-delay": 10000,
                "max-ack-delay": 5000,
                "max-unacked-clients": 5,
                "peers": [{
                    "name": "dhcp01",
                    "url": "http://17.0.1.1:8000/",
                    "role": "primary",
                    "auto-failover": true
                }, {
                    "name": "dhcp02",
                    "url": "http://17.0.2.1:8000/",
                    "role": "secondary",
                    "auto-failover": true
                }]
            }]
        }
    }
]

マインクラフトにて観測されたUpdater.classマルウェアの検証

当記事内には実際に攻撃者が利用したURLなどが無毒化した状態で記述されている。
もし開く場合は自己責任で。

時系列

  • 2022/12/27 10:18: サーバが正常に起動していない現象を観測
  • サーバ管理担当者がサーバを再起動
  • java.net.NoRouteToHostException: No route to hostエラーを観測
  • レンタルサーバ事業者にネットワーク設備の点検を依頼
  • 2022/12/27 10:30: レンタルサーバ事業者から、障害が発生していない報告を受ける
  • マルウェア検査アプリケーションでマルウェアを発見
  • 2022/12/28 10:35: 障害の復旧作業に筆者が合流
  • 2022/12/29 02:00: 当該障害がクリティカルなセキュリティ事故であることが判明
  • 2022/12/30 10:56: 当該サーバが復活し、当初のエラーが出なくなっている可能性があることが発覚
    これに伴い、VirusTotal, Any.Runの結果を記事内に追記
  • 2022/12/31 02:00: 感染していた場合でも、エラー無しでサーバが正常に動作することが判明

はじめに

本記事ではプラグインファイル・Paperバイナリに対して感染したUpdater.classについて取り扱う。

それ以外の項目については、
こちらの記事(英語)が参考になると思われる。

また、実際に感染したサーバを実行した際の動作について
Any.Run
で実験を行っている。
そちらも見ていただけると、本記事と別途記述している2記事についてもよくご理解いただけるのではないかと思う。

エントリーポイントの汚染

複数のmainメソッドにおいてUpdater.init()を呼び出すコードが発見されている。

また、コードとして


public static void main (String[] arrstring) {
    Updater.init();
    String[] args;
}

のように変更されており、
引数が編集されていることで書き換え済みか認識しているのではないかと考察した。

また、CFRでの解析においてUpdaterクラスが認識出来ていなかったが、
おそらくUpdater.classファイルに不正な値を入力することで、
解析アプリケーションをまともに動かせなくする目的があったのではないかと考える。

Updater.init()の挙動

リバースエンジニアリングした全文は
こちら
を参照していただきたい。

また、筆者が必要に応じてアノテーションを付けたファイルは
こちら
から利用できる。

前提バイナリのロード

Updater.classでは
最初にjava.io.tmpdir内の
kernel-certs-debug4917.logというファイルに対して
Fileオブジェクトを生成する。

もし、すでにkernel-certs-debug4917.logファイルが存在しているのであれば、
当該ファイルをjavaもしくはjavaw.exeで実行する。

拡張子は.logであり、いかにも一般的なファイルに擬態させているが、中身はjarファイルである。

バイナリのダウンロード

もしkernel-certs-debug4917.logが存在しない場合、次の動作が行われる。

  1. 初期値として0Prpx2ekKWc=をロード
  2. リソース内の/plugin-config.binからIJMZR7mQs8faH0sBuSYr8g==をロード
  3. ttp:// files <dot> skyrage <dot> de/mvdからjarファイルをを.logとして保存
    (VirusTotal,
    詳細記事)
  4. 1もしくは2でロードした値を-Dgnuに代入し、ダウンロードしたバイナリを実行
  5. ttp:// files <dot> skyrage <dot> de/updateからzip形式のファイルをダウンロード
    (VirusTotal,
    Any.Run,
    詳細記事)
  6. ダウンロードしたファイルを加工(詳細は割愛)
  7. ダウンロードしたファイルを実行

追跡

Whois

Whoisの最終変更は下記のとおりである。

Changed: 2021-07-12T21:50:02+02:00

また、ネームサーバはCloudflareの物が利用されていたようだ。

当該マルウェアについて本チームの考察

共同で研究を行った のふれむ氏 の調べたところによると、
当該マルウェアは2022年の8月ごろから発見されていると見て良いのではないかと思われる。

当チームが観測したバージョンは、
おそらく2022/12/27日時点でCloudflare側が規約違反もしくはFreeプランの制限超過で
Proxyを解除し、それによりCloudflare以外からの通信を拒否していたサーバにアクセスできなくなったことで
No route to hostがエラーとして出るようになり、発覚に至ったと考えられる。

また、今回感染したファイルは
MCAntiMalware

Kasperskyのウイルス対策ソフトウェアで検出が可能だった
ようである。

Pluginを導入する前に
Virus Total
などで検査するだけでも十分防げた可能性は高い。

当該のマルウェアに関する他の記事

  • https://ljskatt.no/analysis/updater_class/
  • https://www.spigotmc.org/threads/1-19-1-fatal-error-converting-plugin-updater-class.567801/
  • https://goli-carft.com/minecraft-malware-announcement/

分散化についていろいろ

注意: Decentralizedを完全に誤解してそうな人の記事です。娯楽としてどうぞ

分散化=インターネット初期

そもそも、インターネット初期にはインターネットサービスの覇権企業など存在せず、
各大学や一部の企業・個人が自らサーバを構築して運用していた。

これは、中央集権から遠く離れたものだと考えられる。

現代のインターネットに必須な中央集権

現在のインターネットの運用に必要な企業・団体は多く存在する。

Tier 1プロバイダは各国との接続においてファイバーなどの維持を業務にしていたりするし、
ICANNなどはDNSの実運用上の必須団体といっても差支えないであろう。

ほかにも、RIPE NCCなどのIPアドレス・ASN管理団体も、
インターネットをインターネットとして運用するうえで必須の団体・企業といえるであろう。

Self-hostedとFOSS

もし中央集権的なインターネットから脱出したいなら、
Self-hostedとFOSSが重要なキーワードになるかもしれない。

Self-hostedとは自らサーバや環境を用意しサービスを提供することを指す。

FOSSは無料でオープンなソフトウェアを指し、
多くの場合オープンソースソフトウェアを指すワードである。

なぜFOSSがリストにいるのか

正直、Self-hostedだけあれば十分である。
しかし、そのサービスを長く使いたいのであれば、
特定の個人・法人に開発が一任されるプロプライエタリなソフトウェアではなく、
やる気さえあれば自分でプログラムをより良い方向へ持っていけるOSSを使うとよいだろう。

Self-hostedで中央集権から脱出する

Self-hostedなサービスで中央集権から脱出するには次の点を考える必要がある。

  • 2台以上のサーバを複数の国にまたいで設置する
  • 特定の国の予測不能なインターネット障害・遮断への対抗
  • ISP・IP管理団体の分散
  • gTLDを購入する
  • gTLDを取得することによって当該ドメインの管理団体がICANNのみになる
  • ここを一般ユーザを置いていかずに中央集権から分離させることはできなさそう?
  • できるだけSSL/TLSなどで暗号化する
  • 現代でサービスを運用する場合は必須です
  • できるだけバージョンが新しいものを利用しましょう
  • ソフトウェアはLTSもしくは最新のものを利用する
  • LTSが好ましい
  • 決して古いソフトウェアを使い続けないようにしましょう

ソフトウェアの例

メール

Modoboa

Modoboaはオールインワンのメールサーバソリューションである。

オープンソースであり、ある程度のセキュリティ設定もやってくれるらしい。

実際に運用する際にはPostfixなどでModoboaホストと接続できなくてもメールがDropしない仕組みを作るのは必須である。

オンラインファイルストレージ

Nextcloud

Nextcloudは何でもありのグループウェアである。

先に紹介したModoboaのメールをこのソフトウェアから閲覧することもできる。

また、カレンダーや連絡先も共有できるほか、チャットや通話も可能である。

連絡先・カレンダー

Nextcloud (別で紹介)

Nextcloudで紹介している。

チャット

Element

ElementはチャットソフトウェアとしてMatrixという公開されたプロトコルを使用しているソフトウェア。

詳しいわけではないので詳しい紹介はしないが、いかにもDecentralizedな感じの設計だと思う。

Mattermost

Mattermostは完全なオープンソース製品ではないが、
最低限チャットソフトウェアに欲しい機能は無料で提供してくれる。

UIはSlackに近く、Teamという概念でSlackのように複数ワークスペース作ることもでき、
個人・企業問わず便利なソフトウェアである。

通話

Jitsi

Jitsiはオープンソースのビデオ通話ソフト。

有名なWebで完結するビデオ通話ソフトウェアと同じように利用できる。

最後に

ここに書いてあるようなサービスを社内だけでも運用すると、
インターネットが発展するにあたってなぜ中央集権が必須となっていったのかよくわかる。

令和の世界でVAIO type Pを使う話

VAIO type P (VGN-P70H)という謎のUMPCを買ったので令和の世界でまともに使えるようにいろいろと頑張った話。

OS

さすがにWindows VistaやWindows 7を使うわけにはいかないのでWindows 10を入れるかLinuxを入れようと思います。

今回はDebian 11とXfceを入れました。

gihyo.jpの記事を見てめんどくさい作業が必要かとおびえていましたが、
標準のままでも特に問題なく動くようです。

Xfceを入れた理由

最初はLXDEを入れようとしましたが、ソフトウェアでrfkillが働き、
rfkillをインストールして毎回unblockしないといけないという謎の現象が起きたのでその次に軽そうなXfceを入れました。

PulseAudio問題

様々な記事においてDebian系OSでPulse Audioを使うと音飛びするという現象が報告されており、
私も同じ現象に悩まされたのでPulseAudioをアンインストールしました。

バックライト問題

Xfceの問題なのかVAIO type Pとの相性問題なのかバックライト系があまりいい感じに動きません。

今のところ
– しばらく放置して画面が暗転した後の操作でバックライトが設定値ではなく最大になる
– 再起動のたびにバックライト最大になる
– 定期的にXfceが再起動してバックライトが最大になる

これらの問題があります。
また、Xfce側ではどうやらバックライトの設定はもとのままというように認識しているらしく、
バックライトの明るさバーと実際の設定値が一致しません。

多分Xfce側がVAIO type Pに対応できてないだけだと思います。

Xfceが勝手に再起動する問題

その名の通りです。
セッションは引き継がれるのでそう見えてるだけかもしれませんが、
毎回画面ロック+バックライト最大になるのでつらいところです。

ハードウェアのアップグレード

SSD

私はまだ換装していませんが、SSD化(フラッシュ化)するのはかなりありだと思います。

そもそも、フラッシュ化しないと安心して持ち運びできないですよね。

バッテリ

VGP-VPL15という純正のLサイズバッテリがあります。

今いい感じの出品がないので買えませんが、近日中に手に入れたいですね。

用途

もともとRDPクライアント用として買いましたが、かなりいい感じです。

今のところWireGuardでVPNを張ってFreeRDPでリモート接続してます。
FreeRDPだとalsaを直接呼び出せるのでPulseAudio問題も回避できます。

USBシリアルケーブルとcuコマンドでシリアル通信で管理するタイプのルータの設定用マシンとしても使えます。

個人的には大満足です。

参考

  • https://lovely910.com/2019/12/30/%E4%BB%A4%E5%92%8C%E5%85%83%E5%B9%B4%E5%8D%81%E4%BA%8C%E6%9C%88%E3%80%80manjaro-linux%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%97%E3%81%9Fvaio-typep%E3%81%AE%E3%81%9D/
  • https://gihyo.jp/admin/serial/01/ubuntu-recipe/0057?page=1

日本国内に蔓延る営業ワードとしてのIPoEを撲滅したい話

そもそも私もよく分かっていないが「IPoEは早い」などと洗脳されている友人を救うために書きました。

訂正等ありましたらここからお気軽にIssueやPull Request送ってください。

本来のIPoE

そもそも、NTT契約において「フレッツ・v6オプション(, 西)」
契約状態であれば、IPoEとしての接続が可能です。

IPoEとはInternet Protocol (NGNの場合はIPv6)をEthernet (フレッツの場合は光ファイバに変換される)に通すだけで、
これ単体ではIPv6のみが利用可能になります。
(また、NTT自体はプロバイダとしての役割を持っていないため、
インターネットに向けたIPv6通信にはVNEに契約し、VNE保有のIPv6アドレスを受け取れるようにする必要性があります)

________________________________
|          |      |            |
| Ethernet | IPv6 | Content    |
|__________|______|____________|

図にするとこんな感じ

これは、PPPoE時代から存在するシステムで、PPPoEはIPv4のみの対応(例外あり)であり、
これにIPv6を新たに提供するために導入されたものです(多分)。

しかし、これではIPv4が利用できません。

具体的に言うと、Yahoo! JAPANGitHubなどの
ほぼすべての Webサービスに接続できなくなります。

PPPoE

IPv4の接続性が無いと困りますから、IPv4の接続は別で確保する必要があります。

(正確にはPPPoEを利用した通信が先ですが、)PPPoEではIPv4接続性(一部はIPv6も対応)を提供します。
PPPoEはIPoE上で動作するのではなく、Ethernet(光回線)上でPPPの通信を行います。

PPPの通信はIPv4を内包します。

_____________________________________
|          |     |      |            |
| Ethernet | PPP | IPv4 | Content    |
|__________|_____|______|____________|

こんな感じ。

PPPoEが遅いと言われる理由

営業マンやブログはPPPoEが遅いと言います。

これは、PPPoEの通信にはプロバイダ側設備に行く前に一度NTT側設備を経由しますが、
その機材が昨今のトラヒック増加から処理が追いついていないことに起因します。

つまり、人口が少ない街などではPPPoEが遅いという現象は発生しません

営業マンが言うIPoE

都市圏では人口の増加によりNTT側設備が悲鳴を上げ、PPPoEでの通信に限界が出てきました。

そこで現れたのが営業マンがIPoEなどと読んでいる技術です。
実情的にはIPv4 over IPv6となります。

これは、これまでPPPoEを使っていたIPv4の通信をIPv6上に載せてインターネットに羽ばたかせます。

______________________________________
|          |      |      |            |
| Ethernet | IPv6 | IPv4 | Content    |
|__________|______|______|____________|

図にするとこんな感じ。相手に到達する際は送信時のEthernetとIPv6が取っ払われます。

技術的には
– MAP-E
– DS-ite

になり、代表的なサービスとして
v6プラス
OCN バーチャルコネクトサービス
Transix

などがあります。

また、MAP-Eでは1IPを複数契約で共有するので、IPv4アドレスを節約することが出来ます。

で、早いの?

結論を言えば、人口の多い都会においてPPPoEより早くなる場合があります。

しかし、人口の少ない田舎や、PPPoE利用者の少ない地域においてはPPPoEのほうが早くなるでしょう。

そもそも、IPoE方式では一部のサービスが利用できなくなる場合がありますので、
大前提としてPPPoEでの速度低下が著しい場合に試してみるのが賢い方法と言えます。

参考文献

謎の l.instagram.com ドメインが含まれているDMについて

今Twitterを騒がしているl.instagram.comドメインのメッセージですが、
先日このメッセージが来たので、これの正体について少し探ろうと思います。

この記事内では無害化した複数のリンクを記述しているがもし除く場合は自己責任でどうぞ。

届いたメッセージ

image

リンク(無害化済み):

https:// l [dot] instagram [dot] com /?[My Twitter ID]_41_4559965334=e208e6be6eb9bf297853619e7cbeeeb5&e=ATO57b9Db1Mn3Ux88bPC-yAhRTW3Y4c9jBdUr86_sREpA1AL0RtYnjrvhw3WWJked-hV2C2V&s=1&s=1&u=http:// business [dot] instagram [dot] com /micro_site/url/?event_type=click&site=igb&destination=https%3A%2F%2Fwww.facebook.com%2Fads%2Fig_redirect%2F%3Fd%3DAd-9UUpXVqVLNUx_LYaKZeKek5oYlWjoEdXwzKgPbUE9qRpf4p77ahkKJVJ0kuzPpFtsCo6iNW3tiZLDTY2LPR4xCa63d0ycYdTB4uq9n11GSU2h81N4csFuuiw8b0crQB08jWUYW08n1cc2LujG0j00JXW6R7_-_xEeAwWPs56HHv7PQhgj6ktkhSEU5AhwI8vAMSgikxz8VtJ4JiQRzIjL%26a%3D1%26hash%3DAd9_0TyBjc1n8sHe

わかる人にはわかると思いますが、l.instagram.comドメインはTwitterなどで使われているようなt.coドメインのような役割を持っています。

つまり、これは別サイトへのリンクになっているようです。

ソース

このメッセージのリンク先

最終的にはhttps:// m [dot] ztney [dot] com /#BSTに飛ばされます。

流れとしては
1. t.coからLocationヘッダでhttp://l.instagram.comに飛ぶ
2. そのまま307, Locationヘッダでhttps://l.instagram.comに飛ぶ
3. JavaScriptまたはrefreshタグで下記に飛ぶ

https:// business [dot] instagram [dot] com /micro_site/url/?event_type=click&site=igb&destination=https://www.facebook.com/ads/ig_redirect/?d=Ad-9UUpXVqVLNUx_LYaKZeKek5oYlWjoEdXwzKgPbUE9qRpf4p77ahkKJVJ0kuzPpFtsCo6iNW3tiZLDTY2LPR4xCa63d0ycYdTB4uq9n11GSU2h81N4csFuuiw8b0crQB08jWUYW08n1cc2LujG0j00JXW6R7_-_xEeAwWPs56HHv7PQhgj6ktkhSEU5AhwI8vAMSgikxz8VtJ4JiQRzIjL&a=1&hash=Ad9_0TyBjc1n8sHe
  1. 302, Locationタグで下記に飛ぶ
https:// www [dot] facebook [dot] com /ads/ig_redirect/?d=Ad-9UUpXVqVLNUx_LYaKZeKek5oYlWjoEdXwzKgPbUE9qRpf4p77ahkKJVJ0kuzPpFtsCo6iNW3tiZLDTY2LPR4xCa63d0ycYdTB4uq9n11GSU2h81N4csFuuiw8b0crQB08jWUYW08n1cc2LujG0j00JXW6R7_-_xEeAwWPs56HHv7PQhgj6ktkhSEU5AhwI8vAMSgikxz8VtJ4JiQRzIjL&a=1&hash=Ad9_0TyBjc1n8sHe
  1. 302, Locationタグでhttp:// bartinkizogrenciyurdu [dot] com /STALKに飛ぶ
  2. 307, Locationタグでhttpsに飛ぶ
  3. 5,6の流れをURL末端に/を入れて実施
  4. 302, Locationでhttps://m [dot] ztney [dot] com/_BST_に飛ぶ
  5. いろいろあってhttps:// m [dot] ztney [dot] com /#BSTに飛ぶ(理由がわからんかった)

このリンクはよくできていて、t.coを経由していないと(ほかにも条件はありそうですが)Instagram businessに飛ばされます。

LOG IN WITH TWITTERの挙動

最終的にはTwitterのアプリケーション連携に行くが、途中の流れは下記のようになる。

  1. ボタンはhttps://m [dot] ztney [dot] com/girに飛ぶ
  2. 302, Locationでhttps://www [dot] twitbu [dot] com/web/bridge.php?ref=ztneyに飛ぶ
  3. ランダムなトークンを設定した状態で、302でTwitterの連携画面に

oauth_tokenの値が毎回変更されているのが個人的には面白かった。
連携アプリケーション名はランダムで変更されているようだ。

連携画面はこんな感じ。
image

~~たれか暇な人API制限かかるまでアカウント登録してみてくれないかな…~~

最後に

こういうの調べるの楽しい!

簡単なサービス紹介用のページテンプレートを作った話

何かしらのサービス向けの簡単なテンプレートを作ったので紹介ページを書きます。

ライセンスは未定です
(多分MITにしてHTMLとCSSに書くと思う)

見た目

Simple One Page Template

こんな感じのテンプレートです。

全画面使って少しの情報を載せるスタイルのページが複数ページ分含まれます。

一応、ここからフルのデモページを見ることができます。

使った技術

normalize.cssBootstrap Iconsを利用しました。

Bootstrap Iconsは下向き矢印のためだけに使ったので別のやつに置き換えたいなと思っています。

また、デモページの画像用にLorem Picsumを利用してます。
このサービス、ランダムに指定した解像度の画像を持ってきてくれるのでかなり重宝しています

最後に

とりあえずお気持ちでサービスの紹介ページやノリで取ったドメインのWebページなどにご利用されてみてはいかがでしょうか。

作例をコメント欄に貼っていただければ私が見に行くかもしれません。

簡易的なメール受信のセキュリティ的な話

普段私はメールサーバからのレポートやCron Daemonからのメールくらいしか受け取りませんが、
近頃人間からメールを受け取る機会が増えたのでセキュリティについて語ろうと思います。

PPAPとは

Japanese Mail CultureといえばPPAPでしょう。

Password付きZIPファイルを送ります、Passwordを送ります、Angoka(暗号化)Protocol(プロトコル)

JIPDEC, くたばれPPAP! ~メールにファイルを添付する習慣を変えるところから始める働き方改革~ より

日本企業においてはマナーなどと形容される謎文化です。

この文化の難点はただ一つ、パスワード付きzipファイルはセキュリティを通り抜ける点です。

試しに、7-Zipなどのツールで適当にパスワード付きzipを作ってVirus Totalあたりに投げてみてください。
普段なら賛否両論なソフトウェアもあっという間に安全なファイルに早変わりします。

やばいファイル
生の状態のやばいファイル

PPAPされたやばいファイル
PPAPされたやばいファイル

ちなみに、今回スキャンに掛けたShinoLockerはランサムウェアと同じ動作をするテスト用シミュレータです。
もし本物のランサムウェアが現場のセキュリティをかいくぐって職場に入り込んだら…ぞっとしますよね。

実際にEmotetの感染経路にPPAPが存在します。(IPAの記事)

PPAP撲滅派の動き

PPAPは百害あって一利なしの存在です。

人によっては誤送信防止という人もいるかもしれませんが、
パスワードをすぐに送る時点で誤送信防止かは怪しいですし、
そもそもパスワード付きzipのパスワードは簡易的なものが多く、総当たり可能な桁数であることがほとんどです。

例えばIIJパスワード付きzipファイルが添付されたメールを受信サーバ側で破棄する運用に変更されました

これを受け、私個人や、団体としてもPPAPを施されたメールをすべてブロックするか、
相手にZipファイルのハッシュ値を電話で確認するなどの手法でセキュリティ対策としています。

SPF/DKIM

SPF/DKIMは発信者特定の技術です。
双方の違いはSendGridが出している記事がとても参考になります。

これらを設定していない企業からのメールは本当にそのメールが当該企業から来たものなのかを判定することが難しいため、
一度電話やSMSなどの連絡手段を用いてメールが本人から送られたものなのかを確認する運用をしています。

注意点として、SPFレコードが設定されてるメールの場合、メールの転送を行うとFAILになります。
DKIMはこのような問題が起きないため、DKIMも必ず設定し、SPFはSOFTFAILにすることをお勧めしています。

また、DMARCを設定することによって、自社ドメインを騙ったメールが送信されているかを簡単に確認することができるので、設定をお勧めします。

文面

最後は送信者に対する忠告の意が大きいです。

Gmailなどのメールプロバイダでは文面でメールをブロックする場合があるそうです。

例えばハートが使われていたり、? 、 。が多用されていたりなど、
どう考えてもビジネスメールとして相応しくないメールは迷惑メールボックス行きになります。

また、直接的な金銭の要求なども迷惑メールボックス行きになります。

確かに、現代では個人同士のやり取りにメールを利用することは少なくなりましたし、
このフィルターは妥当に思えますが、親しい間柄のビジネスメールでは未だありそうなケースです。
送信者の方はご注意ください。