vmm/vmd

Table of Contents

IPv4 vs IPv6

日本のIPv6採用状況が50%を超えている件について

こんな記事が目にとまった。思えば昔、亀さんが泳いでいたらIPv6で接続 できた証拠だよとかの記事がUNIX Userだかの雑誌に出てたなあ。 どうやっても、泳いでいる姿がお目にかかれなくて、そのうちに幻覚で 泳ぎ出したぞ。遥か昔の事だ。

それが、何時のまにか、IPv6が当たり前になりつつある。スマホの普及でv4な アドレスを入手できなくなったキャリアーがv6に移行したんだろう。 そうでなければ、わざわざv6にする事もなかろう。

いやv6はヘッダーが簡素で扱い易いよとか、ジャンボパケットの流通が可能 だから効率がいいよと、主張する人がいるだろう(知ったかぶりなオイラーの事だ)。

そんじゃ、実験してみるね。

ob$ ftp -6 https://cdn.openbsd.org/pub/OpenBSD/7.6/amd64/install76.img
Trying 2a04:4e42:15::820...
Requesting https://cdn.openbsd.org/pub/OpenBSD/7.6/amd64/install76.img
100% |***************************************************************|   696 MB    02:13
730300416 bytes received in 133.49 seconds (5.21 MB/s)
ob$ ftp -4 https://cdn.openbsd.org/pub/OpenBSD/7.6/amd64/install76.img
Trying 151.101.91.52...
Requesting https://cdn.openbsd.org/pub/OpenBSD/7.6/amd64/install76.img
100% |***************************************************************|   696 MB    02:18
730300416 bytes received in 138.85 seconds (5.01 MB/s)

この差を持って、IPv6凄いじゃんとは、まだ主張はできないな。まあ、IPv6が普及 する様に、せいぜい頑張りませぅ。

姑息なNHK

とあるWebを見ていたらNHK+の面白そうなのが紹介されてた。思わずクリック。

お使いのブラウザ(Firefox)ではご視聴になれません。
推奨のブラウザ(Microsoft Edge・Google Chrome・Safariの最新版)でご利用ください。
詳しくは こちら をご確認ください。 

こちらを見ると、こんなのが出ていた。けど、firefoxが何故駄目かの説明はない。

Internet Explorer(インターネット・エクスプローラー) はなぜ利用できないのですか?

Internet Explorer は、現在の最新バージョン11が最後のものとなり、今後はセキュリティ対策などは
行うものの新機能の追加は予定していないという見解が開発元の企業から示されています。
開発元の企業からは、最新のブラウザとして以下の別製品を使用することが推奨されています。

セキュリティを理由に上げるならfirefoxは当てはまらないぞ。 firefox以外は名だたる会社の製品。何か問題が発生したら、それらの会社に圧力を かけられる。なんたって、BBCと並ぶNHKですから。それに引き変えfirefoxはOSSだから 圧をかけにくいんでしょう。そんな事を説明できないもんだから、口をつぐんでいる (個人の憶測です)。

NHKは良い子ぶって、多様性は善とか言ってるけど、firefoxも大事な一員ですよ。Edge,Chromeは同じ穴のむじな。 もし、正体不明のウィルスに襲われたら全滅するぞ。

久し振りにWindowsを起動。 アップデートで1時間ぐらい費やしたぞ。firefox,chromeも新らしいのになったし。

で、件のものを視聴しようとしてchromeを起動。あんた、さっぱり利用しないんで期限切れだよ。 でも、お試しで1分間だけは見せてあげるよ。

姑息なNHKである。これが公共放送か。自分らの都合を押し付けるな。こちらにも対抗策が あるぞ。オレオレ詐欺ならぬ、chrome詐欺なんてどうだ? ブラウザーのシグネチャをchromeに 変更しちゃう手。chromeはどんな指紋? そんなのサーバーログを見れば一発だな。 いや、一気通貫で、きっと誰かがやってるはず。聞いてみるかな。

あーあ、これから年末にかけて、紅白見ろ見ろ攻撃が続くんだなあ。紅白の為なら、 他は無視しますって体制がまかり通るトンデモ団体ですよ。

vm

amd64な石になって、楽しい事が待っている。仮想環境を作成してそこで、i386,amd64な OpenBSDを稼動させる事ができるんだ。

OpenBSD FAQ - Virtualization に、要領よく手順が解説されている。早速 やってみよーー。一応、目標は、i386で開発環境を作成する事とする。

eq# vmctl create -s 2G mydisk
vmctl: raw imagefile created
eq# ls -l mydisk
-rw-------  1 root  sakae  2147483648 Nov 27 05:54 mydisk
eq# /usr/sbin/vmd
eq# vmctl start -m 1G -L -i 1 -r /mnt/my/ISO/i386Inst76.iso  -d mydisk example
vmctl: started vm 1 successfully, tty /dev/ttyp3
eq# vmctl show
   ID   PID VCPUS  MAXMEM  CURMEM     TTY        OWNER    STATE NAME
    1 13509     1    1.0G    161M   ttyp3         root  running example
eq# vmctl console 1
Connected to /dev/ttyp3 (speed 115200)

(I)nstall, (U)pgrade, (A)utoinstall or (S)hell? i

Terminal type? [vt220]
System hostname? (short form, e.g. 'foo') i3
 :
Available network interfaces are: vio0 vlan0.
Network interface to configure? (name, lladdr, '?', or 'done') [vio0]
IPv4 address for vio0? (or 'autoconf' or 'none') [autoconf]
IPv6 address for vio0? (or 'autoconf' or 'none') [none]
Available network interfaces are: vio0 vlan0.
  :
Installing bsd          100% |**************************| 15218 KB    00:02
Installing bsd.rd       100% |**************************|  3951 KB    00:00
Installing base76.tgz   100% |**************************|   253 MB    00:58
Extracting etc.tgz      100% |**************************|   264 KB    00:00
Installing comp76.tgz   100% |**************************| 43544 KB    00:13
Installing man76.tgz    100% |**************************|  8049 KB    00:03
Installing BUILDINFO    100% |**************************|    54       00:00
  :
Exit to (S)hell, (H)alt or (R)eboot? [reboot] h
syncing disks... done
vmmci0: powerdown

The operating system has halted.
Please press any key to reboot.

~.
[EOT]

開発環境なので、X関係はキッチリと無視してます。man類も必要無かったかも。

eq#  vmctl start -c -m 1G -L -i 1  -d mydisk  example
Connected to /dev/ttyp6 (speed 115200)
Using drive 0, partition 3.
Loading......
probing: pc0 com0 apm mem[638K 1022M a20=on]
disk: hd0+
>> OpenBSD/i386 BOOT 3.67
\
com0: 115200 baud
switching console to com0
>> OpenBSD/i386 BOOT 3.67
 :
OpenBSD/i386 (i3.my.domain) (tty00)
 :
login: root
 :
i3# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd0a      1.9G    879M    941M    49%    /
i3# ifconfig
lo0: flags=2008049<UP,LOOPBACK,RUNNING,MULTICAST,LRO> mtu 32768
        index 3 priority 0 llprio 3
        groups: lo
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
vio0: flags=808b43<UP,BROADCAST,RUNNING,PROMISC,ALLMULTI,SIMPLEX,MULTICAST,AUTOCONF4> mtu 1500
        lladdr fe:e1:bb:d1:c7:9c
        index 1 priority 0 llprio 3
        groups: egress
        media: Ethernet autoselect
        status: active
        inet 100.64.1.3 netmask 0xfffffffe

2Gのうちの、丁度半分が使われている。それから、開発環境なので不要なダエモン君は 極力停止してる。更に、/etc/rcの最後で起動する、kernel reorderもコメントにして おいた。

i3$ cat /etc/rc.conf.local
smtpd_flags="NO"
ntpd_flags="NO"
cron_flags="NO"
sndiod_flags="NO"
pflogd_flags="NO"
library_aslr="NO"

add disk

残り半分に各種pkgを入れていったら、ちょっと窮屈になるかも知れないな。どういう 解決方法が可能か、尋ねてみた。

> diskを増設して、そこにpkgを入れるか。増設したdiskはコマンドラインで、どう
> 指定すればいいのだろう? そこまで面倒を見てくれないかな。

その分だけ -d で指定すればよいです。

 # vmctl start -cL -i1 -m1G -d FuguIta-7.6-amd64-202411151.img -d ExtDisk.img fi76

ISOイメージと生Diskイメージを両方指定するばあいは、-B でどちらから起動するか指定します。

 # vmctl start -cL -i1 -m1G \
     -B cdrom \
     -r FuguIta-7.6-amd64-202411151.iso \
     -d FuguIta-7.6-amd64-202411151.img \
     fi76

around vmctl

vmctl start -cL -m 1G -i1 -d /mnt/my/VM/mydisk i386

こんな風に起動しといて観察。vmmが仮想マシンの本体(いわゆるqemu)だ。それを操る ダエモン君(vmd)が、その上位にいる。仮想マシンを利用したいユーザーは、上記の様 に、vmctl命令で、仮想マシンの起動やら停止を行なう構図。

eq# vmctl show
   ID   PID VCPUS  MAXMEM  CURMEM     TTY        OWNER    STATE NAME
    1 36275     1    1.0G    647M   ttyp4         root  running i386
eq# ps awx|grep vmd
31734 ??  Ip       0:00.00 /usr/sbin/vmd
97759 ??  Ic       0:00.00 vmd: priv (vmd)
65370 ??  Ipc      0:00.01 vmd: control (vmd)
52020 ??  IpUc     0:00.01 vmd: vmm (vmd)
26694 ??  Ipc      0:00.00 vmd: agentx (vmd)
36275 ??  Ipc      0:56.68 vmd: i386 (vmd)
65517 ??  Spc      0:03.73 vmd: i386/vioblk0 (vmd)
17237 ??  Ipc      0:00.01 vmd: i386/vionet0 (vmd)

amd64 vs. i386

64Bitのマシンと32bitマシンでdiskの占有容量にどんな差が出るんだろう? 一堂に会したんで、みみっちくサイズを比較してみる。

kind        amd64        i386     ratio
---------------------------------------
ksh        797712       706784    1.128
tmux      1059512       917560    1.154
cc      101247256    100803020    1.004
libc.so   3810520      3037640    1.254

一番大事なカーネルはどうした? 空気みたいな物なんで、忘れておったわい。 超一流のコンサルが教える ロジックツリー入門 なんて本を読んだ事だし、もう少しマクロに見てみる。

kind         amd64      i386      ratio
---------------------------------------
kernel      24640      30496      0.807
/bin        14548      12364      1.176
/usr/bin   578184     376344      1.536
/usr/sbin   38952      34544      1.127
/usr/lib   489376     384544      1.272

だからどうしたと言われたら、返す言葉は有りません。単なる興味本位です。

NAT

FAQに説明されてたOption 2 を適用するも、疎通が確認できない(ping 8.8.8.8) おかしいな。そう言えば、昔ちょっとやったな。erlang and firewall めぼしいヒントは得られず。識者に相談。

設定拝見したところ、大丈夫っぽい感じですねぇ。
sysctl net.inet.ip.forwarding=1 ですよね?

ビンゴでした。FAQにも何の記述もなく、途方に暮れる所であった。ありがとうございました。

set skip on lo
block return    # block stateless traffic
pass            # establish keep-state

match out on egress from 100.64.0.0/10 to any nat-to (egress)
pass in proto { udp tcp } from 100.64.0.0/10 to any port domain \
        rdr-to 8.8.8.8 port domain

block return in on ! lo0 proto tcp to port 6000:6010
block return out log proto {tcp udp} user _pbuild

実際の/etc/pf.confは、こんな感じ。FAQでは、変数を使っていたけど、シャラくさい ので、 dns_address を直接に記述してます。 これで pkg_add gdb ができた。

i3$ du -sh /usr/local/
138M    /usr/local/

こんな容量を消費するのね。

で、ついでに河豚板側のpf関係を少しモニター。

eq# pfctl -sr
block return all
pass all flags S/SA
match out on egress inet from 100.64.0.0/10 to any nat-to (egress) round-robin
pass in inet proto udp from 100.64.0.0/10 to any port = 53 rdr-to 8.8.8.8 port 53
pass in inet proto tcp from 100.64.0.0/10 to any port = 53 flags S/SA rdr-to 8.8.8.8 port 53
block return in on ! lo0 proto tcp from any to any port 6000:6010
block return out log proto tcp all user = 55
block return out log proto udp all user = 55
eq# pfctl -ss
all udp 239.255.255.250:1900 <- xx.xx.xx.xx:49568       NO_TRAFFIC:SINGLE

何だろう、このパケット?

eq$ grep 1900 /etc/services
ssdp            1900/tcp                        # SSDP
ssdp            1900/udp                        # SSDP
SSDP 【Simple Service Discovery Protocol】
UPnP(Universal Plug and Play)はパソコンなどからネットワーク上に接続されたルータや
プリンタなどの周辺機器を検知できるプロトコルで、複雑な設定作業などを自動化し、
「繋げばすぐに使える」状態を実現する。

encryption disk

仮想が簡単に出来るんで、暗号化をやってみたい。正式には、 OpenBSD フルディスク暗号化 (on VirtualBox) の様にするらしい。また、FAQにも、しっかり解説されてた。 RAID and Disk Encryption この機能を河豚板でも取り入れていて、 データの保存領域を暗号化する なんてのがが提供されてる。

インストールの途中で、暗号化のパスフレーズどうするなんて質問が、i386の 仮想をやってる時にでてきてた。もしやこれが簡単暗号化じゃなかろうか? 単に BIOSレベルのパスワードかも知れないけど。。。実験してみましょ。

eq# vmctl create -s 1G a6
eq# vmctl start -c -m1g -r /mnt/my/ISO/amdInst76.iso -d a6 amd64

と言う事で、パスフレーズを盛り込んでインストール。そして起動。

eq# vmctl start -c -m1g  -d a6 amd64
vmctl: starting without network interfaces
Connected to /dev/ttyp3 (speed 115200)
Using drive 0, partition 3.
Loading......
probing: pc0 com0 mem[638K 1022M a20=on]
disk: hd0+ sr0*
>> OpenBSD/amd64 BOOT 3.67
Passphrase:hogefuga     ;; まちがったフレーズ(実際はエコーされません)
incorrect passphrase
Passphrase:123456       ;; 正しいフレーズ
\
com0: 115200 baud
switching console to com0
>> OpenBSD/amd64 BOOT 3.67
boot>
booting sr0a:/bsd: 19908565+4318216+415936+0+1236992 [1540875+128+1395768+109249
8]=0x1c87f60
entry point at 0xffffffff81001000
  :
OpenBSD/amd64 (a6.my.domain) (tty00)

login: 
 :
a6$ df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd1a      975M    700M    226M    76%    /

インストールは、デフォルトでコンパイラー、マニュアル無しのLinux仕様にしてみた。

下記の様にすると、パスフレーズを変更できます(くどい様ですが、エコーはされません)。

a6# bioctl -P sd1
Old passphrase:123456
New passphrase:2828
Re-type passphrase:2828

dmesgを確認すると、ソフトウェア・レイドの暗号バージョンになってました。

sd0 at scsibus1 targ 0 lun 0: <VirtIO, Block Device, >
sd0: 1024MB, 512 bytes/sector, 2097152 sectors
softraid0 at root
scsibus3 at softraid0: 256 targets
sd1 at scsibus3 targ 1 lun 0: <OPENBSD, SR CRYPTO, 006>
sd1: 1023MB, 512 bytes/sector, 2096560 sectors
root on sd1a (fed7a5cd9f10e36a.a) swap on sd1b dump on sd1b

記念に、もどき品をUSB-HDDに保存しておいた。

eq# time cp a6 /mnt/VM/
    4m06.11s real     0m00.11s user     0m05.35s system

john

前回やった、johnのジャンボ版に、openbsd-softraidの暗号を解読するツールが付属 してたんで、試してみる。これを使ってjohnが理解できるパスワードを抽出し、それをjohn する仕組みの様だ。

eq# python3 openbsd_softraid2john.py ~sakae/a6 pass.txt

Traceback (most recent call last):
  File "/mnt/my/src/john-1.9.0-jumbo-1/run/openbsd_softraid2john.py", line 89, in <module>
    process_file(sys.argv[i])
  File "/mnt/my/src/john-1.9.0-jumbo-1/run/openbsd_softraid2john.py", line 42, in process_file
    headers = open(filename).read()[:0xaa0 + 81920]
              ^^^^^^^^^^^^^^^^^^^^^
  File "<frozen codecs>", line 322, in decode
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xea in position 0: invalid continuation byte

ちょっと悔しいので、ソースの冒頭を閲覧。

#  In OpenBSD 6.1, softraid crypto switched to bcrypt PBKDF instead of PKCS5
#  PBKDF2.
#
#  References,
#
#  http://thiébaud.fr/openbsd_softraid.html
#  http://www.openbsd.org/faq/upgrade61.html
#  https://github.com/openbsd/src/blob/master/sys/dev/softraid.c
#  https://github.com/openbsd/src/blob/master/sys/dev/softraidvar.h

softraid source

eq$ cd sys/dev/
eq$ wc softraid*
    5200   14670  132611 softraid.c
     174     579    4692 softraid_concat.c
    1294    3650   35423 softraid_crypto.c
     195     672    5568 softraid_raid0.c
     441    1205   10471 softraid_raid1.c
     363    1079   10267 softraid_raid1c.c
     961    3108   25442 softraid_raid5.c
     850    2737   21079 softraid_raid6.c
     753    2725   22921 softraidvar.h
   10231   30425  268474 total

巨大なソース群だ事。沼になってる事、請け合いだな。

再挑戦して返り打ちされた

性懲りもなく、i386で再挑戦。

>> OpenBSD/i386 BOOT 3.67
Passphrase:hahha
aborting...
Passphrase:123456
 :
cyp# df -h
Filesystem     Size    Used   Avail Capacity  Mounted on
/dev/sd1a      975M    691M    235M    75%    /

若干、容量少なめです。

pythonコードを改変。バイナリーとしてread。それに付随するインチキな変更です。

def process_file(filename):

    with open(filename, 'rb') as f:
        headers = f.read()[:0xaa0 + 81920]
    start = headers.find(b"marcCRAM")
    if start != -1:
        headers = headers[start:]

    if headers[:8] != b"marcCRAM":
        sys.stderr.write(filename + " : Wrong magic\n")
        return
    if headers[72:81] != b"SR CRYPTO":
        sys.stderr.write(filename + " : Wrong RAID type\n")
        return
    if headers[260] != 1:
        sys.stderr.write(filename + " : Wrong optional header type\n")
        return
    if headers[284] != 2:
        sys.stderr.write(filename + " : Wrong encryption type\n")
        return
    :
    sys.stdout.write(str(hexlify(headers[2424:2552]) + b"$"))  # salt

    # masked keys, sr_meta_crypto structure
    sys.stdout.write(str(hexlify(headers[364:2412]) + b"$"))

    # HMAC, chk_hmac_sha1 field
    sys.stdout.write(str(hexlify(headers[2676:2696])))
    :

こんな風に実行。

eq$ ./openbsd_softraid2john.py cyp >qq

johnに喰わせてみると、、

eq$ ./john /home/sakae/qq
Using default input encoding: UTF-8
No password hashes loaded (see FAQ)

お気にめさない様だ。こんなんだけどね。

cyp:$openbsd-softraid$380$b'42ecf82f48de3e818b3d9c4152bec1532
  :
b513ec77$'b'7c490c3cfdbe798dd71dea7e0ca56c62a72c8f4a'$3

無理してpythonが走る様にしちゃったから、怪しい所が有るはず。そもそもpython2 時代のコードだからなあ。無理して昔にしてみる?

on python-2.7

eq# pkg_add python-2.7.18p12
quirks-7.50 signed on 2024-11-30T16:40:59Z
python-2.7.18p12: ok
--- +python-2.7.18p12 -------------------
 *** Python 2.7 is end-of-life and no longer receives security updates.

河豚板の再起動すると、過去を忘れる機能が働くんで、気にする事は有りません。

eq$ ./openbsd_softraid2john.py /mnt/VM/cyp
/mnt/VM/cyp : Wrong optional header type
eq$ ./openbsd_softraid2john.py /mnt/VM/a6 >a6.txt

今度はオリジナルのコードで抽出が初められた。i386は駄目だったのでamd64版でトライ。 無事に抽出成功。

eq$ wc /home/sakae/a6.txt
       1       1    4422 /home/sakae/a6.txt

こんな長い1行のファイルになった。それをjohnに喰わせてみる。

eq$ ./john ~/a6.txt
Using default input encoding: UTF-8
Loaded 1 password hash (OpenBSD-SoftRAID [PBKDF2-SHA1 128/128 SSE2 4x2])
Cost 1 (kdf) is 3 for all loaded hashes
Cost 2 (iteration count) is 144 for all loaded hashes
Proceeding with single, rules:Single
  :

何時まで待っても終了しない。我が辞書には、2828 なんて、登録されていないからだ。 ならば、筆頭に登録されてる123456にしてやれ。そうやってみたら、抽出スクリプトが 文句を言ってきた。

optional header typeが違うよ。encryption typeも違うよ。ここら辺はプリチャック なので無視させた。強引さも必要なんだな。

eq$ ./openbsd_softraid2john.py /mnt/VM/a6
a6 : kdf of type '2456194983' is not supported yet!

今度は、こんな抵抗にあったぞ。もう、これぐらいにしとく。

xsel

長いファイルをX Window Systemのクリックボードにコピーする方法(xselはpkgから追加 しておく事)。

cat file | xsel --clipboard     ;; copy
xsel --clipboard --output       ;; check
xsel --clipboard < /dev/null    ;; clear

ペーストはマウスの中ボタン・クリックか、C-v が使える。

README

読図の基本がわかる本 なんて本を読んだ。

普通、読図と言えば、回路図を読む事だと思ってた。このアンプはA級で動作 してるだろう。それは、グリッド・バイアスをどう与えているか確認すれば いいんだな、、なんて話かな。

全々違った。 登山をする時に必須となる地図の読み方を指南した本だ。コンパス(磁針計)が 使えなくては、豚に真珠になるんで、コンパスワークもしっかり説明されてた。

磁北と真北の関係が真っ先に説明されてた。磁北ってのはコンパスの針が差す 方向、真北は北極星の方向。コンパスの針は、西に7度とかずれている。まずは これを補正するとな。そんな事、知らなかったぞ。

現在地からの角度を割り出す、ペアリングとか、山座同定の方法、とかが説明 されてる。こりゃ、実習してみない事には、身につかんなあ。こういう時は 臨場感が漂うユーチューブかな。後で探してみるか。


This year's Index

Home