chroot("/home/hibari")

備忘録とかに使えそうなノート

ArchLinux環境作り 〜タイル型ウィンドウマネージャ〜

2017年、明けました。おめでとうございます。

 

ArchLinuxを普段使いしているときにはXfceを用いているが、ウィンドウをちまちま動かしたり揃えたりするのが少し面倒になってきてしまったので、ここで心機一転しようというのがきっかけ

というわけでタイトルの通り、タイル型ウィンドウマネージャを取り入れることにした

今回採用したのはQtileというもの。最終的にこのような感じの見た目になった

ブラウザと2つのシェルが隙間なく配置されていて非常に使いやすくなった

f:id:lcstmarck:20170101180220p:plain

 

初期画面で

$ startxfce4

と記述すればXfce4のデスクトップが立ち上がり、

$ startx

と記述すればQtileが立ち上がるように設定した

これは.xinitrcにQtileを指定していることにより区別することができた

 

このような環境を、以下のWikiに従って導入していく

Qtile - ArchWiki

 

環境はpython3なのでAURからQtileを入れる

$ yaourt -S qtile

背景の壁紙設定もしたかったのでnitrogenも導入する

$ yaourt -S nitrogen

このときにvte3-ngがvte3と衝突するけどvte3を削除してもいいかと聞かれるが、

Arch Linux - vte3-ng 0.46.1.a-1 (x86_64)

Arch Linux - vte3 0.46.1-1 (x86_64)

上の2つを見比べて削除しても問題なさそうと判断したので削除してvte3-ngを選択した

これでインストール作業はこれで終了となる

 

nitrogenを利用して背景を設定してみる

$ nitrogen ~/picture

引数には背景にしたい画像が含まれているディレクトを指定する

するとウィンドウが開かれるので背景を選んでApplyをすると設定される

一度Applyすると~/.config/nitrogen/bg-saved.cfgに設定したものが反映されているので次回からログインしたときに同じ設定を反映させるためにレストアする

実際にレストアするためには

$ nitrogen --restore

をすると以前の設定が反映されるので以降のrcファイルに記述しておくことにする

 

次に~/.xinitrcを以下のように編集する

setxkbmap -model jp106 -layout jp
nitrogen --restore

exec qtile

デフォルトではキー配列はUSのままなのでsetxkbmapでJIS配列にした

あとは細かい設定をしていくために設定ファイルを作成する

$ mkdir ~/.config/qtile

$ nano ~/.config/qtile/config.py

config.pyファイルには以下を記述した

 

設定したことをざっくりすると、

  • 操作はXfce4でやったことを少し流用できるように
  • Ctrl+Alt+矢印でワークスペースの左右移動
  • 同じレイヤに2つ以上のアプリケーションがあるときにSuper+vで横に分割

ターミナルはxtermは個人的にあまり好きではないのと、xfce4-terminalが意外と気に入っているのでそれを使うことにした

スタートアップもどきとして同ディレクトリにシェルスクリプトを配置

 

途中で使用するmod1, mod4はキーのコードを表している

$ Xmodmap

をするとキーがどのmodであるかを確認することができる

本環境ではSuperキーはmod1, Altはmod4であることを確認した

 

最後に設定内容を載せる

from libqtile.config import Key, Screen, Group, Drag, Click
from libqtile.command import lazy
from libqtile import layout, bar, widget
import subprocess, os

def autostart():
    home = os.path.expanduser('~')
    subprocess.call([home + '/.config/qtile/start.sh'])

 

mod = "mod4"
alt = "mod1"

keys = [
    # Switch between windows in current stack pane
    Key(
        [mod], "Down",
        lazy.layout.down()
    ),
    Key(
        [mod], "Up",
        lazy.layout.up()
    ),

    Key(
        [mod, "control"], "Down",
        lazy.layout.shuffle_down()
    ),
    Key(
        [mod, "control"], "Up",
        lazy.layout.shuffle_up()
    ),

    # Switch window focus to other pane(s) of stack
    Key(
        [mod], "space",
        lazy.layout.next()
    ),

    # Swap panes of split stack
    Key(
        [mod, "shift"], "space",
        lazy.layout.rotate()
    ),

    Key(
        [mod, "shift"], "Return",
        lazy.layout.toggle_split()
    ),
    Key(
    [mod], "v",
    lazy.layout.toggle_split()
    ),

    # Toggle between different layouts as defined below
    Key([mod], "Tab", lazy.next_layout()),
    Key([mod], "w", lazy.window.kill()),

    Key([mod, "control"], "r", lazy.restart()),
    Key([mod, "control"], "q", lazy.shutdown()),
    Key([mod], "r", lazy.spawncmd()),

    # Move to side workspace
    Key([alt, "control"], 'Right',lazy.screen.next_group()),
    Key([alt, "control"], 'Left',lazy.screen.prev_group()),


    Key([alt, "control"], 'j',lazy.spawn("xfce4-terminal")),
    Key([alt, "control"], 'l',lazy.spawn("firefox")),
    Key(, 'Print',lazy.spawn("xfce4-screenshooter")),
    Key([mod], 's',lazy.spawn("xfce4-appfinder")),

    Key([mod], 'e',lazy.spawn("exo-open --launch FileManager")),

    Key(, "XF86AudioMute", lazy.spawn("amixer -q set Master toggle")),
    Key(, "XF86AudioLowerVolume", lazy.spawn("amixer set Master 5%-")),
    Key(
, "XF86AudioRaiseVolume", lazy.spawn("amixer set Master 5%+")),
]


groups = [Group(i) for i in "123456"]

for i in groups:
    keys.append(
        Key([mod], i.name, lazy.group[i.name].toscreen())
    )
window to group
    keys.append(
        Key([mod, "shift"], i.name, lazy.window.togroup(i.name))
    )

layouts = [
    layout.Max(),
    layout.Stack(num_stacks=2)
]

widget_defaults = dict(
    font='Arial',
    fontsize=16,
    padding=3,
)

screens = [
    Screen(
        bottom=bar.Bar(
            [
                widget.GroupBox(),
                widget.Prompt(),
                widget.WindowName(),
                widget.CPUGraph(),
                widget.NetGraph(),
                widget.Battery(),
                widget.Volume(),
                widget.Systray(),
                widget.Clock(format='%Y-%m-%d %a %I:%M %p'),
            ],
            30,
        ),
    ),
]

# Drag floating layouts.
mouse = [
    Drag([mod], "Button1", lazy.window.set_position_floating(),
        start=lazy.window.get_position()),
    Drag([mod], "Button3", lazy.window.set_size_floating(),
        start=lazy.window.get_size()),
    Click([mod], "Button2", lazy.window.bring_to_front())
]

dgroups_key_binder = None
dgroups_app_rules = []
main = None
follow_mouse_focus = True
bring_front_click = False
cursor_warp = False
floating_layout = layout.Floating()
auto_fullscreen = True
focus_on_window_activation = "smart"

wmname = "LG3D"

 

 

車のバッテリー交換における備忘録

タイトルの通り、車のバッテリーを交換することになった

通常のバッテリーの寿命が2〜3年なので今後も交換する機会こそあれど、頻繁ではないので備忘録として記しておこうという次第

やってみれば至って単純な作業だったし、Google先生に聞けばそれくらいの記事はわんさかと出てくるとは思うけど、自分の車のためにも書いたほうがいい気がして

 

早速作業に取り掛かる

この記事を書こうと思ったのがバッテリーを交換している途中だったので写真の時系列がずれているけど、手順のメモを記すだけなので気にしないこととする

ボンネットを開けると奥の方でバッテリーが鎮座している

f:id:lcstmarck:20161119164802j:plain

 

写真の黒枠で囲っている部分がバッテリーの端子を留めている部分

左側が+極、右側がー極になっているのでこれらのナットをラチェット等でゆるめる

ゆるめたら上向きに引き抜くと端子から簡単に取れる

f:id:lcstmarck:20161119135744j:plain

 

次にバッテリー上部を押さえている部分を取り外す作業

写真の黒枠で囲っている部分のナットを同じく緩める

このナットは取り外してはいけない

取り外してしまうと蓋にぶら下がっているだけの棒が落下してしまい、車内のどこかに入り込んでしまって大変なことになる

f:id:lcstmarck:20161119141041j:plain

ナットを緩めたらぶら下がっている棒の下部の、直角に曲がっているところが金属板に引っかかっているのでそれをずらしてあげる

両方ずらすと上写真のように蓋を取ることができる

あとはバッテリー本体を引き抜く

f:id:lcstmarck:20161119142635j:plainf:id:lcstmarck:20161119170407j:plain

交換前のバッテリーはSIVIS 44B19R(左)

交換後のバッテリーはcaos 60B19R(右)

コンパクトな見た目に反してとても重い。どのバッテリーでもそうだけど鉛すごい。

あとはこの交換するバッテリーを埋め込んで逆の手順を踏めば作業は終了

 

交換後にエンジン回してみたらセルモーターがとても快調に動いてくれた

やってみれば単純だったけど、単純だからと軽くやって感電はしたくないものだね

Archlinux環境作り ~terminal、追加コマンド編~

引き続きメモ

xfce4-terminalがメインのターミナルとなるので、この周りも少し変えていく

すべてのフレームやバーを取り払い、~/.config/xfce4/terminal/terminalrcに設定ファイルがあるので

MiscDefaultGeometry=80x45

 に変更

 

あとはコマンドをなんとなく追加

 unzip,gdb

Archlinux環境作り ~サウンド、タッチパッド、ネットワーク、タスクマネージャ編~

前々回くらいでなんとかデュアルブートに成功したので早速少しずつArchlinuxの環境を作っていこうという次第

いつ再インストールする羽目になるかわからないので記録しておこうというのが目的

環境を作っていくにつれて随時追記していく予定

 

初期状態は前回の記事の状態から

 

デスクトップに移行してからというものまず最初に気が付いたのが、

タッチパッドがクリック以外全く効かないということだった

なので専用のドライバを取り入れる

$ sudo pacman -S xf86-input-synaptics

 

次に気付いたのは音が出力されないということ

とりあえずサウンド周りを導入することから

$ sudo pacman -S alsa-utils

$ yaourt -S xfce4-volumed

 次にサウンド関連のカードやデバイスを調べる

$ aplay -l

 とすると

**** List of PLAYBACK Hardware Devices ****
card 0: HDMI [HDA Intel HDMI], device 3: HDMI 0 [HDMI 0]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 7: HDMI 1 [HDMI 1]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 0: HDMI [HDA Intel HDMI], device 8: HDMI 2 [HDMI 2]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
card 1: PCH [HDA Intel PCH], device 0: ALC3232 Analog [ALC3232 Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0

 と出てくる

カード0は基本的にHDMIに関する部分であることが分かるのでおそらく最後のカード1、デバイス0のものがスピーカーから出力してくれるのではと判断

実際に音を直接出させてみるには

 $ aplay -D plughw:1,0 hoge.wav

 とする

plugが抜けていると"チャネル数が使用不可能"と言われてしまう

"1,0"はそれぞれカード番号、デバイス番号を入力する

今回上記の組み合わせで音が出てきてくれたのでこれで進む

これをデフォルトのサウンド出力にするので

$ sudo nano /etc/asound.conf

 でファイルを開いて

defaults.ctl.card 1

defaults.pcm.card 1

defaults.pcm.device 0

 

pcm.!default{

  type plug

  slave.pcm "hw:1,0"

}

 と入力してから再起動すると、うまく音を出力してくれた

 

次はifconfigを使いたいので

$ sudo pacman -S net-tools

ついでにWiresharkも導入しよう

インストールした最後に、

NOTE: To run wireshark as normal user you have to add yourself into wireshark group

と書かれていたのでグループにも追加しておく

$ sudo pacman -S wireshark-qt

# gpasswd -a <username> wireshark

 

 

次にタスクマネージャのようなものの導入

# pacman -S conky lm_sensors

# sensors-detect (yesと言い続ける)

$ sensors (一度情報を表示してくれる)

 インストールしたらデフォルトの設定ファイルが/usr/share/doc/conky***/conky.confにあるので

$ cp /usr/share/doc/conky***/conky.conf ~/.conkyrc

$ nano ~/.conkyrc

 で以下を追記(または変更)

alignment = 'top_right'

background = true

gap_x = 5

gap_y = 0

font = 'IPAGothic:style=Regular:size=12'

own_window_type = 'panel'

update_interval = 3.0

own_window_transparent = true

own_window_argb_visual = true

own_window_hints = undecorated,below,sticky,skip_taskbar,skip_pager

double_buffer = true

 

(テキスト欄)

${color grey}CPU Temp:$color ${execi 60 sensors | grep 'Physical' | cut -c18-21}℃

${color grey}Core0:$color ${execi 60 sensors | grep 'Core 0' | cut -c18-21}℃

${color grey}Core1:$color ${execi 60 sensors | grep 'Core 1' | cut -c18-21}℃

 

あとはeth0を変更しておくこと

 Conkyの設定においてown_window_typeをdesktopにするのが一番理想だったのだが背景をクリックするとデスクトップの後ろに隠れてしまう現象が起こり、ググってもそういうことが起こってなかなか解決の糸口が見つけられなかったのでpanelで妥協することにした

normalやoverrideにするよりかはよっぽどマシかなと

最後にデスクトップ環境を立ち上げたときに自動的に起動する設定

~/.xprofileにて

sleep 5 && conky

 を追記する

Windows7とArchlinuxでデュアルブートしたメモ

インストールバトルをまた近々やりそうなので忘れないように記しておく

ディストリビューションはArchlinuxを選択

 

ISOファイルは2015.08.01を採用

USBメモリにイメージファイルを焼いて差し込む

BIOSでUSBを優先にしてF10

 

x86_64版をブートしていざ対決

キーボード配列設定(自分はJIS配列)

# loadkeys jp106

まずは言語設定

# nano /etc/locale.gen

en_US.UTF-8

ja_JP.UTF-8

の#を消す

ファイルのアップデート

# locale-gen

いきなりワイヤレス設定をすることに挫折したので有線で進めていく

# ip link

 で "enp~~"のインターフェースを見る

インターフェースを有効にしてIPアドレスをもらいに行く

# ip link  set <interface> up

# dhcpcd <interface>

 ハードウェアクロックを合わせて確認する

# timedatectl set-ntp true

# timedatectl status

 

次にパーティションの設定

一晩意味もなく悩んだ末に、

  • 120GB ... /
  • 4GB  ... swap

とすることにした

残った領域はWindows7のCドライブやDドライブ、リカバリ領域などとなっている

なので拡張パーティションをすることに

自分が使っている環境はBIOSMBRの環境だったのでboot用のパーティションは特には作らなかった

最近ではUEFI+GPTが主流らしいのでマイノリティっぽい...??

# cfdisk /dev/sda

 で120GBで"Linux"でBootableフラグを立てる

あとは4GBで"Swap/Solaris"

の割り当てを行った

# lsblk -f

 で書き込みや割り当てを確認してフォーマットの設定

今回Linuxに割り当たったのは/dev/sda6だったので

# mkfs.ext4 /dev/sda6

 swap領域についてはスワップの有効化

# mkswap /dev/sda7

# swapon /dev/sda7

 

次にパーティションのマウント

最初に"/"のマウントを行わなければならないのだが、"/"しか持ち合わせていないので

# mount /dev/sda6 /mnt

 ※swap領域のマウントはしないこと

次にミラーリストの選択

# nano /etc/pacman.d/mirrorlist

 日本のサーバが2件あるのでその2つをAlt+6でコピーして一番上でCtrl+Uでペースト

tsukubaを一番上にしているもののエラーが多かったので変えようか今検討中

 

続いてベースシステムのインストール

まるごとインストールするので "-i" オプションはつけなかった

# pacstrap /mnt base base-devel

 

fstabの設定とその確認

"/"に1フラグが付いていればok

# genfstab -U /mnt > /mnt/etc/fstab

# cat /mnt/etc/fstab

 

chrootのベースシステムの設定

# arch-chroot /mnt /bin/bash

 先ほどと同じようにロケールの設定

# nano /etc/locale.gen

# locale-gen

# echo LANG=en_US.UTF-8 > /etc/locale.conf

# export LANG=en_US.UTF-8

 ※この時にLANG=ja_JP.UTF-8にしてしまうと、コンソール上に表示される文字が激しい文字化けを起こしてしまうので日本語にするのはまた後にすること

 

キーマップとフォントの設定

 # nano /etc/vconsole.conf

 で.confファイルを開いて

KEYMAP=jp106

FONT=lat9w-16

 と入力して保存

タイムゾーンの設定

# ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

 

ハードウェアクロックの設定

# hwclock --systohc --utc

 ただし、今回裏にはWindows7が眠っている

Windowsはデフォルトでlocaltimeを採用しておりArchlinux上でlocaltimeを使うとバグを引き起こす可能性もあるらしいので、Windows7のlocaltimeをオフにしてUTCにしてやる必要がある

しかしこの状態ではWindowsに切り替えることが出来ないのでこの件は後述して先に進む

 

ホスト名は自由に決める

# echo <ホスト名> > /etc/hostname

# nano /etc/hosts

で開くと

#<ip-address><hostname.domain.org><hostname>

127.0.0.1 localhost.localdomain localhost <***>

::1            localhost.localdomain localhost <***>

 とあるので<***>の部分にさきほどのホスト名を記述

 

rootのパスワードの設定

# passwd

 

ついでネットワーク設定はこのまま有線で行うので

# systemctl enable dhcpcd@enp**.service

 とするだけで一応優先の設定は完了する

そのあとで無線の設定を行うので必要なものを今のうちにインストールしておく

# pacman -S iw wpa_supplicant dialog

 dialogはwifi-menuで用いるために必要

wifi-menuってすごいと思う

 

いよいよデュアルブートのための準備をする

ブートローダGRUBを採用

# pacman -S grub os-prober

 os-proberはディスク上に他のOSがないか調べてあったらブートローダに投げてリストに加える働きをする(らしい)

次にGRUBのインストールおよびos-proberの稼働

# grub-install /dev/sda

# os-prober

# grub-mkconfig -o /boot/grub/grub.ctg

 

chrootから離脱してアンマウント、再起動

# exit

# umount /mnt

# poweroff

 ここでUSBを抜く

再び起動するとおそらくデュアルブートが出来ていて

f:id:lcstmarck:20150902143037j:plain

リカバリ領域も混じってるものの粗方このようになっていると思う

ここで"Windows7"を選んで先ほどのUTCの設定を行う

regeditから

HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/TimeZoneInformation

 まで進み、新規で"RealTimelsUniversal"をDWORD値で埋め込み、編集で値を「1」に書き変えておく

念のためにWindowsの時刻同期を無効化する

右下の時計で右クリック「日付と時刻の設定」→「インターネット時刻」→「設定の変更」→「インターネット時刻サーバと同期する」のチェックを外す

 

終わったら再起動して再びArchlinuxに入る

pacmanの設定

# nano /etc/pacman.conf

 でcore,extra,community,multilib,repo-nameの行の

SigLevel = hogehoge

Include = /etc/pacman.d/mirrorlist

などの#を消しておく

後でyaourtを使えるようにするために末尾に

[archlinuxfr]

SigLevel = Never

Server = http://repo.archlinux.fr/$arch

を書き込んで保存

# pacman --sync --refresh yaourt

 をしてyaourtの導入は完了

 

ユーザの追加とパスワード設定

# useradd -m <名前>

# passwd <名前>

 -m を付けると/homeにディレクトリを作ってくれる

このままではsudoが使えないので、

# visudo

で、User privilege specificationの欄のrootの下に

名前 ALL=(ALL) ALL

 を追加して保存

ここで無線の設定を行う

wifi-menuを使って接続しようと思う

# ip link

# wifi-menu <interface>

 こうしてSSIDを見つけて選んで従っていけばつながる(たまにエラーが起こるが)

この時に初めての場合はプロファイルの名前も決めるが、後々で使うのでシンプルな名前が好ましそう(?)

しかしこのままでは再起動したときにはもとに戻っているので次回から自動的に接続してもらうようにする

# netctl enable <profile>

また、手動でwifi接続を行いたいときには

# netctl start <profile>

 

続いてX Window Systemの導入

ビデオカードに何を用いているかを調べてから導入している

# lspci | grep VGA

# pacman -S xorg-server xorg-server-utils xorg-xinit xterm

intelビデオカードを用いている場合

# pacman -S xf86-video-intel

VirtualBox上でインストールしている時

# pacman -S xf86-video-vesa

 次にデスクトップ環境の導入

最初GNOMEを入れてみたものの自分とは合わなかったのでXfceを使うことに

 # pacman -S xfce4

 自分はログインして自動起動はさせないのでそのまま、デスクトップ環境に入るときには

#($) startxfce4

 

日本語入力を導入する

ibusでコケたことがあったので今回はfcitxを採用

# pacman -S otf-ipafont

# fc-cache -vf

# pacman -S fcitx-mozc fcitx-configtool fcitx-im

$ nano ~/.xprofile

でファイルを開いたら

export GTK_IM_MODULE=fcitx
export QT_IM_MODULE=fcitx
export XMODIFIERS="@im=fcitx"

 と入力して保存、再ログインするとFcitx Configrationでmozcが追加されていて日本語入力することが出来た

この際にUS配列の分をリストから削除しておいた

 

日本語の環境作り

# nano /etc/locale.conf

 にて

LANG=ja_JP.UTF-8

 を追記し、en_US.UTF-8コメントアウト

 

といった具合でデュアルブートから中途半端な環境設定までの備忘録として書き連ねた

おそらく再インストールすることが免れなさそうなので記録しておく

いや長かった

security camp 2015に参加した話

 

8月11日から15日の5日間にわたって、セキュリティキャンプ全国大会2015が行われた

友人からセキュリティキャンプの応募の時期が来たことを教えていただいたので必死に書いた結果、無事に参加させていただくことが出来た(選択問題に救われた)

 

今回は様々な分野の講義を取れるトラック制を採用しており、高レイヤ、低レイヤ、検知、解析の4分野を各々の時間に選択して講義を受ける形式であった

 

自分は、

  • バグハンティング入門
  • ツール自作で知るパケットとネットワークの仕組み
  • 遠隔操作マルウェアの検知および検知回避
  • ネットワーク通信から不審なものを見つけてみよう
  • HTTPプロキシ入門
  • 脆弱性検出実戦(ファジングによる検出と脆弱性報告)
  • フォレンジック技術を用いたインシデントレスポンス
  • レイヤ1からのネットワークセキュリティ - 光ファイバの盗聴および侵入手法の研究
  • レイヤ1からの通信サービス - 1G Ethernet専用線の構築実習

の講義を選択した

ふたを開けてみると解析トラックが一つもなかった

 

自分はどちらかというと低レイヤ(?)の人なのでトラック制を生かして高レイヤっぽい講義もできるだけ取ろうと考えていた

 

さて話はキャンプ当日になる

海浜幕張駅に行くための乗り換えチャレンジをなんとか乗り越えたので無事に受付開始30分前くらいに到着した

海浜幕張駅について改札出ると研修施設であるクロスウェーブ幕張が見えたので記念撮影

...のつもりだったのだが...

f:id:lcstmarck:20150823224250j:plain

なんとも目も当てられない写真が撮られていた

この時日が照っていてカメラの画面が全く見えない中シャッター音もしたしとりあえず撮れたでしょうと踏んで確認しなかった、大失敗である

ちなみに自分たちが5日間生活する建物は見事に指で隠れてしまっている部分なのでこの写真では見ることが出来ない

 

建物に入ると、すでに何人か来ていた

というか当日の皆の動向を見ていると受付開始前に行くつもりだったらしい

この時間は名刺大交換会を開き、いろんな人としゃべる時間だった

なんというか、皆様プロでした 私なんて....

 

夕食だったかな、で突如として出現したマスコット「まもるくん」

f:id:lcstmarck:20150824001355j:plain

 

開講式で様々な面白い話を聞き、ご飯も食べ、いよいよ本格的にセキュリティキャンプ開始といった感じで早速最初の講義を受けた

  • バグハンティング入門

事前学習の段階で分かりやすい資料を作成してくださったのでなんとか理解が追いついた

おそらく講義のほとんどはXSSの話であったと思う

バグハントは意図的に狙うだけではなくて、偶然起こった不可解な表示からバグを発見することもあると知った

後半にはXSSをしてみようということで演習をした

いかにしてバイパスするかということで必死に考えてみたものの結局解くことはできなかった

 

  • ツール自作で知るパケットとネットワークの仕組み

これは実際にC言語でパケットを送信するプログラムを作成したり、自分でパケットを手で書いて相手に届けてみようということを主に行った

この講義中の内部ネットワークのパケットの量はとんでもなくて、内容もカオスな感じであった(ある人はプロである、とかね)

自分でパケットを作ることで実際に使われているパケットがどのような構造をしているのか、などを体感的に学ぶことが出来た

ちなみに受信プログラムを書き変えると、任意のパケットを受信して...などと簡易版Wiresharkを作成することもできるらしい

 

この講義の最初にShinoBOTという遠隔操作を疑似体験できるソフトウェアを用いて実際にお隣の人のパソコンを遠隔操作してみたりした

> calc

> calc

などとやって電卓をたくさん出すいたずらをしたり...笑

後半は実際に遠隔操作マルウェアVBScriptで作成する時間であった

自身のスクリプトを埋め込んだり、コマンドを受け取って実行したりといった工程を行うように作成したが、私自身VBScript自体を理解することに時間がかかってしまい...

 

  • ネットワーク通信から不審なものを見つけてみよう

この講義ではキャンプ用に貸し出されたパソコンに入っていた2種類のpcapファイルを読んでなにかおかしい通信を行っていないかを探し出す講義であった

1時間半ほどであったが、時間をフルに使って解析に当たった

早速pcapファイルをWiresharkで開いて通信でおかしなところがないかを同席した友人たちと見ていった

Export ObjectsやFollow TCP Stream等でいろいろ見ていくとexeファイルがあったりなんだりでもはやすべてが疑わしくなってきてしまうほどの情報量でとても大変であった

その中にIMAPパケットがあったので抽出してみると異常な動作をしたという内容のメールがあったのでそこからIPアドレスを絞ったりなどしていくと根源であるマルウェアを見つけ出すことが出来た

Wiresharkをもっと使いこなせるようになりたい...

 

 

  • HTTPプロキシ入門

この講義ではHTTPなどの基本的な話から実際にツールを使って情報を書き変えたりしてみようというものであった

自分は高レイヤにもとても疎いので自分的には最初に基本的な話をしてくださってとても助かった

講義ではプロキシツールとしてBurpを用いた

Burpは以前に自分が初めて使ったプロキシツールであったが、うまく使いこなすことが出来なかったのでFiddlerに乗り換えて使用していたが、この講義でBurpの使い方を教わってこの便利さを知ったのでBurpを再び使い始めようかと思っている

最後はスマートフォンアプリの通信を改ざんして「アプリの正常な動作」に反する動作をさせようという演習を行った

Burp、すごいや!

 

教室に入ると、白い布に覆われたなにやら怪しいものを観測

この中には様々な通信機器が入っていて、何の通信機器であるかを見ないでコマンド等を用いて当ててみようという演習を最初に行った

自分たちが割り当てられたのはiPadNintendo 3DSであった(当初はそれが何であるかを知らない)

pingやnmapを使って何の機器であるかを探り、「Apple」「Nintendo」であるということや開いているポートを特定したりなどをした

次にファジングツールを使ってその機器に脆弱性がないかどうかを検査する実習を行った

ファジング検査はざっくりいうと「ありとあらゆるデータ列などを通信機器に送り込んで誤作動を起こさないか」を見るものである

そして今回使わせていただいたファジングツール、ライセンスを買うととんでもな額になるものらしい...こんな貴重な体験させていただけてキャンプに感謝です

 

この講義ではフォレンジックを行う時に、どのようにして調査するためにデータをコピーするか、この状況下のときにはこのようにする、などといったようなインシデントレスポンスの基本を教わった

この講義で実際にデータを移してみたりFTK Imagerをつかってみたりと手を動かして体験することが多かった

印象に残っているのはデータを消した(上書きした)と思っていてもハードディスク上にははっきり残っていることがあるということであった

これも実習で体験したのだが、テキストファイルの最後の数百文字を削除して上書き保存して再びそのテキストファイルを開くと当然消した分は表示されない

しかしフォレンジックツールを用いてその周辺のデータを見てみると消したはずのデータが一部が残っていた

こういう性質からデータの尻尾をつかむことが出来るときがある模様

 

  • レイヤ1からのネットワークセキュリティ - 光ファイバの盗聴および侵入手法の研究

教室に入ると驚くべき数の講師陣が後ろに...!!

そして教室の真ん中にはなにやら異彩を放っている物体があったりととにかくすごいの一言しか出なくて一瞬教室を間違えたと思って出て行ってしまった

講義の前半は光ファイバを用いた技術についての話を聞いた

先生の話し方や怪しいアヒルの存在からか笑いの絶えない講義であった

後半は実際に盗聴士になったつもりで実習を行った

やりかたとしては「スッとやってキュッとしてプツンとしてカチッとやる」のような感じ(意味不明)

それぞれの工程、最初は自分含め皆おぼつかない手つきでああだこうだと悪戦苦闘していたが、後半になると皆ぱっぱと出来るようになって先生から「セミプロの盗聴士になれたんじゃないかな」と言われた笑

やり方を知ったもののこれをする準備がものすごく大変なので実際にやろうとは到底思えないので絶対やることはない

これをする中で一番大切なアイテム:"めがねクリーナー ふきふき"

 

前半は専用線に関する基礎的な話と通信経路には複数本あって...などの話を聞いた

光をプリズムに通すと様々な色に分かれるが、それを利用して通信を区別している話はとても興味深かった

後半は実際に専用線を自分たちで延長して通信してみようというものであった

が、これを行うためにクロスウェーブ幕張→電話局→クロスウェーブ幕張という何とも謎な専用線を張ったという

 

講師陣 参加者命名、「日本一無駄な専用線

 

そして一端に光ファイバをつなげて、階段をのぼって講義教室まで引き伸ばし、再び階段を下りてもう片方の末端から別の光ファイバをつなげて、また階段をのぼって講義教室まで引き延ばす、つまり

教室→クロスウェーブ幕張→電話局→クロスウェーブ幕張→教室

という専用線を作成した

そこで光がどうなっているかなどを観察したり、通信を行ってみたりした

通信するパソコンはほんの2メートルほどしか離れていないのに通信経路の長さは10キロメートル弱

本当に無駄な専用線であったが、とても面白く貴重な体験をさせていただいたと思う

 

キャンプ前から一番怖かったものだったりする

バイナリ問題をぜひとも...という意気込みで問題に当たったが自分の目が節穴だったり力不足でうまくいかなかった

最近自分は旗取りに向いてない気がしてきている

 

 

最後に

終えた今でも自分がなぜセキュリティキャンプに参加させていただくことが出来たのか、と思うことがあるがそれでも参加できたことは光栄だしとても貴重な体験をしたり、そこでたくさん友達が出来たりといいことであふれていた

このイベントは終わりではなく始まりに過ぎないことは言うまでもないのでこの経験からさらに勉強を重ねていきたい

今回教えてくださった講師陣やいろいろ助けてくださったチューターの方々、そしてそこで出会った友人たちに感謝いたします

ひとまずネットワークに興味を持ち始めたり...???

 

しかしとりあえずとある本を読み終えないと...

 

f:id:lcstmarck:20150824001847j:plain

 

余談

 

f:id:lcstmarck:20150824001423j:plain

CentOSの圧倒的重さ!!

 

終わり

 

seccamp15 応募用紙 選択5

今更であるが以前書いた応募用紙選択2に引き続き選択5を載せようと思う

応募用紙の原稿ファイルの所在を忘れそうなディレクトリに入れてしまったのでなくしても困る

ずいぶんと荒い解答をしたので読む人からすれば雑だろうと思われたと思う

 

(1)【必須】上記の C 言語のプログラムはどのような動作をしますか。また、この関数を呼び出して利用する main 関数の例を作成してください。

 

(2)【必須】上記のアセンブリコードを、いくつかのブロックに分割して、おおまかに何をしている部分かを説明してください。もし、上記のアセンブリが気に入らないのであれば、好きなアーキテクチャコンパイラアセンブル結果を載せて説明しても良いです。

 

(1)function関数は引数に渡した数字nをその(数字-1)までのnの倍数を順次配列に格納する動作をする

つまり、

n*0, n*1, n*2, … n*(n-1)

をそれぞれ配列0,1,2,…,n-1番目に格納する。

 

 

倍数の配列が出来上がったので、配列の並びを見ると初項0,公差nの等差数列になっているのでこの和を求めるmain文を作成した

以下にそのmain文を掲載する

 

q5.c

#include<stdio.h>

void function(int *array, int n){
  int i;
  for(i=0; i<n; i++){
    array[i] = i*n;
  }
}

int main(){

  int j,sum;

puts(“どの数字の倍数にするか入力してください”);
  int n;

scanf(“%d”,&n)
  int array[n];

  function(array,n);

  for(j=0;j<n;j++){
    sum += array[j];
  }

  printf("この等差数列の総和は%d\n",sum);
}

 

試しに実行した結果を以下に載せる

$ ./a.out

どの数字の倍数にするか入力してください

3

この等差数列の総和は9

 

 

(2)

    0:   56                   push   %esi

    1:   53                   push   %ebx

function関数を呼び出されてからesi,ebxレジスタを使用するのでスタックに値を避難させている

 

    2:   8b 5c 24 0c         mov   0xc(%esp),%ebx

    6:   8b 4c 24 10         mov   0x10(%esp),%ecx

function関数に渡された引数をレジスタに格納する

具体的には%ebxにarray配列のポインタを、%ecxにnの値を格納している

 

    a:   85 c9               test   %ecx,%ecx

    c:   7e 18               jle   26 <function+0x26>

for文の中でゼロ判定を行うのでゼロフラグをリセットさせるためにtestを行っている

 

    e:   89 ce               mov   %ecx,%esi

  10:   ba 00 00 00 00       mov     $0x0,%edx

  15:   b8 00 00 00 00       mov     $0x0,%eax

for文の中に突入するための準備を行っている

具体的にはiの0の初期化、配列番号の0の初期化、掛け算を円滑に行うためのnのコピーをしている

 

  1a:   89 14 83             mov   %edx,(%ebx,%eax,4)

  1d:   83 c0 01             add   $0x1,%eax

  20:   01 f2               add   %esi,%edx

  22:   39 c8               cmp   %ecx,%eax

  24:   75 f4               jne   1a <function+0x1a>

for文の中身

順に配列の番号のシフト、iのインクリメント、掛け算の計算(edxはforを回すたびにn増加しているので事実上掛け算が成立している)、i < nの判定、cmpのフラグから再びforに戻るかbreakするかの命令を行っている

 

  26:   5b                   pop   %ebx

  27:   5e                   pop   %esi

  28:   c3                   ret

 

function関数の冒頭で避難させたレジスタの内容を元に戻してreturnをしている

 

 

 

 

アセンブリをもっとすらすら読めるようになりたい...