投稿者「mkaraki」のアーカイブ

FortiGateの購入を考えている人へ

この記事では、FortiGateを購入しようか迷っている人向けに、
様々な代替品や自宅ネットに向いているかどうかについて記述します。

代替案

FortiGateは多くの場合4kからご購入いただけます。
もし、コンピュータやVMハイパーバイザをお持ちの場合は実際の使用感をお試しいただけます。

Sophos Firewall Home Edition

Sophos社はイギリスのセキュリティソフトウェア・ハードウェアベンダです。

Sophosは無償ツールとして、
Sophos Firewall Home Editionを提供しています。

システム要件は高いですが、UTMアプライアンスを購入する前に試す感覚で利用してみるといいでしょう。

FortiGate-VM

FortiGate-VMはFortiGateのVMイメージ版です。
VMのため、ハードウェアアクセラレーションが利用できませんが、使用感を確認する用途では十分です。

FortiGate-VMは優勝製品ですが、製品デモが存在します。
実機を導入する前に一度使ってみるとよいでしょう。

FortiGateの選び方

製品名の見方

FortiGate製品の製品名は基本、下記のフォーマットで記述されています。

FortiGate nnX

FortiGate: シリーズ名
nn: 任意の数字 多くの場合、2-4桁
X : アルファベット1文字

Xは世代を表します。2023/01/17時点ではFが最新世代です。

nnは機種の世代内での優位性を表します。
多くの場合、数字が大きくなれば上位機種になります。
また、1桁目は多くの場合、機能が追加されたものを表します。
例えばFortiWifiシリーズの50EとFWF-51Eは、内部ストレージの有無が異なります。
(Data Sheet)

FortiWifiシリーズは、FortiGateにWi-Fiアクセスポイント機能が追加されたものです。

製品の選び方

OSサポートで選ぶ

FortiGate製品は同一世代の場合でもサポート内容が異なる場合があります。
例えば、50Eと60Eは同一世代ですが、50EはOSが6.2まで対応なのに対し、60Eは現状最新版である7.2に対応しています。
(参考)

この問題は顕著に影響し、50EのOSの最終サポートは2023/9/28ですが、60Eは2026/9/30まで行われ、
もし次期OSにも対応するのであればこの期限はさらに伸びます。
(参考)

追加された機能で選ぶ

OSサポートは追加された機能に顕著に影響します。

例えば、MAP-Eサポートなどは6.4以降であり、
50Eは対象外
(参照)
になります。

基本機能で選ぶ

基本的な機能は各FortiGateのデータシートを参照してください。

また、OSごとにFeature Platform Matrixが公開されています。
こちらを参照することで、各製品の大まかな機能や制限を確認することができます。

性能で選ぶ

基本的な性能はは各FortiGateのデータシートを参照してください。

例として、当環境では50EはSSLインスペクションを行うと、80Mbps-100Mbpsほどのスループットを記録します。

お持ちのForti製品との連携で選ぶ

FortiGateは同じFortinet社の製品と強い連携が可能です。

例えば、FortiAnalyzerをお持ちの場合、
公式ドキュメントのCompatibility with FortiOSセクションを確認し、
お持ちのFortiGateがどのFortiOSに対応しているか確認してください。

FortiGateでセキュリティ上の恩恵を受けることができるか調べる

FortiGate 50Eの場合、確認できた限り下記の通信を監視することができます。

  • 特定のSSL通信
  • SSL通信の中身 (CA証明書のインストールが必要)
  • SSL証明書
  • 中身のインスペクションが可能
  • HTTP
  • SMTP
  • POP3
  • IMAP
  • MAPI
  • FTP
  • CIFS
  • DNS (53)
  • 通信があったことの確認・ブロックが可能
  • Application Signaturesに登録されている通信

また、QUICなどの対応していないプロトコルの通信も存在します。

これ以降は、特記すべき点が存在する機能について記述します。
また、各機能は基本ライセンス無しで運用できますが、定義ファイルの更新にはライセンスが必要です。

SSLインスペクション

SSLインスペクションを行う際は、基本的にCAルート証明書のインストールが求められます。
また、Androidなどの一部OSや製品はSSLインスペクション状態で一部機能が正常に動きません。

そのため、AndroidやGoogle HomeなどのデバイスはSSL証明書インスペクションへの切り替えが必要です。

SSLインスペクションにライセンスは必要ありません。

QUICなど、インスペクションできない通信も存在します。

AntiVirus

マルウェアのHashを読ませることで、ライセンス無しでAntiVirus機能が利用できますが、
本体に保存できるHashの数を考えると実用的ではありません。

Web Filter

Web Filter機能はライセンス無しで利用できますが、
FortiGuard category based filterがオンの場合はすべての通信がブロックされます。

YouTubeチャンネル制限はFortiOS 6.2.12では現状利用できません。

また、File Filterにおいて、動作状況が確認できないフィルター設定が存在します。

DNS Filter

DNS Filter機能はライセンス無しで利用できますが、
FortiGuard category based filterは利用できない可能性があります。

FortiGate所有の注意点

FortiGateを所有される際は、
上記のセキュリティ機能の特記事項に加え、
下記の点について十分注意してください。

ファームウェア

FortiGateではライセンス契約を行っていない場合、
正規の方法でファームウェアを取得できません。

脆弱性

FortiGateはUTMシェア1位という立場上、
セキュリティ脆弱性が多く発見されています。

VPN機能などを利用するうえでFortiGateに外部からアクセスできるようにする場合、
FortiGateのファームウェアを最新のものにするなど、セキュリティ対策を怠らないでください。

おわりに

筆者はFortiGate 50Eのオーナーですが、FortiGateはライセンスがあって輝きます。

しかし、ライセンスが無くても十分輝ける余地を持っている良い子です。
(あと、かっこいい)

購入前にこの記事をよくご確認いただき、
幸せなインターネットライフをぜひFortiGateとお過ごしください。

個人的なFortiの設定

この記事では、他の環境にも転用が効きそうなFortiGateの設定を記述します。

基本的に私が使っているFortiGateに合わせて随時更新していくと思います。

前提

  • FortiGate 50E
  • FortiOS 6.2.12

更新履歴

日時 内容
2023-01-11 初版

Security Fablic

Settings

Cloud Loggingを有効に設定、
頻度はRealtimeを選択

Fabric Connectors

Policy & Objects

IPv4 Policy

先頭に

  • Feodo Trackerリストからの通信をDROP (Logあり)
  • Feodo Trackerリストへの通信をDROP (Logあり)

を追加

Security Profiles

AntiVirus

  • Detect Viruses: Block
  • Inspected Protocols: すべてOn
  • APT Protection Options: すべてOn
  • Original File Destination: お好みで (私はDiscard)

Web Filter

  • FortiGard category based filter: お好みで (ライセンスがない場合はOff)
  • File Filter
  • Log: On
  • Scan Archived Contents: On
  • List:
    • Deny password protected
    • Protocols: HTTP + FTP
    • File types: 7z, rar, zip
    • Action: Block
    • Direction: Incoming
    • Match Password Protected Files: On
  • Search Engines: お好みで
  • Static URL Filter
  • Block invalid URLs: On

DNS Filter

  • FortiGuard category based filter
  • Remote CategoriesにFabric Connectorsで指定した定義があるのでブロック
  • それ以外はお好みで、個人的には
    • Malicious Websites: Block
    • Phishing: Block
    • Spam URLS: Block
    • Dynamic DNS: Monitor
    • Newly Observed Domain: Monitor
    • Newly Registerd Domain: Monitor
    • Unrated: Monitor
  • Static Domain Filter
  • External IP Block Lists: Fabric Connectorsで指定した定義があるのでブロック
  • Options
  • Allow DNS requests when a rating error occurs: お好みで (私はOm)
  • Log all DNS queries and responses: On

Application Control

  • Categories: ProxyとP2Pをブロック、それ以外はMonitor
  • Options
  • Allow and Log DNS Traffic: Yes
  • QUIC: Block

Intrusion Prevention

  • Obfuscated.JavaScript.Access: Allow, Disable Logging
  • Seveity 3-5: Block, Log
  • Seveity 2: Default, Log
  • Scan Outgoing Connections to Botnet Sites: ライセンスがあるならBlock

Email Filter

  • Enable Spam Detection and Filtering: On
  • Span Detection by Protocol: お好みで
  • FortiGuard Spam Filtering: すべてOn
  • Local Spam Filtering: Black White List以外On
  • File Filter: すべてOn

SSL/SSH Inspection

別で記事を用意します。

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での速度低下が著しい場合に試してみるのが賢い方法と言えます。

参考文献

Google Pixel Buds A-Seriesを買った話

初めてレビュー記事みたいなものを書きますが、
Pixel Buds A-Seriesを手に入れたので軽く使い勝手を書き連ねていきます。

もともとは乗り換え用

もともとはXperia Ear Duo
SoundSport Free wireless headphones
の乗り換え用で買ったものです。

ついでに、h.ear in Wirelessの代替として使えたらいいなという考えでした。

値段差が3分の1くらいのものなので正直期待はしていませんでしたが、
結論から言うと1万円でこれはかなりありな製品だったのではと思います。

音の感じ方

私の耳は音質の差を聞き取れるほど良い耳ではないので感じ方だけ。

SoundSport Freeや初代h.ear in Wirelessでは「音楽に包まれている」という感覚でしたが、
こちらは「音楽を聴いている」という感覚です。

悪いことではないですが音楽に浸りたいのであればBoseやSonyのお高めのイヤホンを買うべきでしょう。

雰囲気はXperia Ear Duoの音をもっといい感じにしたものです。

遮音性

ノイズキャンセリングや外音取り込みはついていません。

しかし、音として入ってくるのは大まかな音で会話内容はわからないレベルには遮音性はあります。

個人的には遮音性が高すぎるため、
会話がイヤホンを取り外さずにできるように外音取り込み機能はあったほうがよかったかなと思いました。
別に音質求めないので通話用のマイクで適当に実装してほしかったと思います。

通知・アシスタント機能

通知機能はとても便利です。

しかし、Xperia Earシリーズと違い、特定アプリからの通知が来た際にベルが鳴る形です。

この状態で本体のタッチパネルを長押しすると通知を読み上げてくれます。

音量の自動調整

音量調整機能ですが、Xperia Earの場合、相対的に現在の音量から調整してきますが、
Pixel Budsは絶対値で合わせているのではないかと思うほど音量を上げてきます。

Pixelとの連携

Pixelシリーズとの連携は最強です。

端末設定から本体の設定をできるので普通に便利です。

最後に

Androidユーザでしたら、普通にありな選択だと思いました。

個人的には片耳利用の際にどっちの耳でも聞けるのはよかったです。