vmm/vmd
Table of Contents
IPv4 vs IPv6
こんな記事が目にとまった。思えば昔、亀さんが泳いでいたら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度とかずれている。まずは これを補正するとな。そんな事、知らなかったぞ。
現在地からの角度を割り出す、ペアリングとか、山座同定の方法、とかが説明 されてる。こりゃ、実習してみない事には、身につかんなあ。こういう時は 臨場感が漂うユーチューブかな。後で探してみるか。