6月 25

OpenStreetMap を使ったマイマップのような uMap を試してみる

を見てuMap を試してみました.

以下のページにアクセスしてマップを作成とするだけです.

試しに書いてみました.
日本語化もされているし簡単に地図も書けるので人にも勧めやすくていいなと思いました.


フルスクリーン表示

埋め込み時に埋め込みコードをそのまま貼り付けるとイギリスとかの辺りが表示されてしまうのですが,地図編集時のURL http://umap.openstreetmap.fr/ja/map/linux02_11213#17/31.57706/-229.44820 の#以降の #17/31.57706/-229.44820 を埋め込むと任意の座標を表示できました.


周りのデータが少なくて寂しかったのでざっと道路沿いの建物をトレースしてみました.
しかしまだまだ寂しいですね><



6月 25

gist にコマンドラインから貼り付ける

先日コマンドラインからgist に貼り付けられるんだと驚かれたのでちょっと書いておきます.

その時使ったsctipt はこちら.

Debian jessie 以降,Ubuntu 14.04 以降だとパッケージもあります.このパッケージで導入した場合コマンド名は gist ではなく gist-paste になります.

自分で入れる場合は,gem やHomebrew が使えます.

  • apt $ sudo apt-get install gist
  • gem $ sudo gem install gist
  • Homebrew $ brew install gist

※Homebrew が動く環境を持っていないのでこちらは未検証です.

導入後利用する前に,認証を済ませておきます.2要素認証にも対応しています.

$ gist --login
Obtaining OAuth2 access_token from github.
GitHub username: matoken
GitHub password: 
2-factor auth code: 984736

Success! https://github.com/settings/applications

認証が終わったら試してみます.
一番単純な動かし方は貼り付けたいファイルを指定するだけです.これで公開状態で貼り付けられます.

$ gist lingrbot_web.cgi
https://gist.github.com/ed68bd7182ffddee4801

ファイルタイプを指定する場合は面倒ですがファイル名も指定しないと反映されないようです.

$ gist -f ml2lingr.pl -t perl /tmp/ml2lingr.pl
https://gist.github.com/3021d8d064d8a1d29ba9

標準入力も

$ gist
(type a gist. to cancel, when done)
hoge
fuga
https://gist.github.com/3e993a396a7671403f9e

$ echo “hoge” | sha512sum |gist
https://gist.github.com/970e190f97ae67c8e90d

更新も可能です.

$ gist -u 3021d8d064d8a1d29ba9 -f ml2lingr.pl -t perl /tmp/ml2lingr.pl
https://gist.github.com/3021d8d064d8a1d29ba9

しかし,更新などはURL やID を指定しないといけないのでgitでclone しておいて編集後push したほうがお手軽そうです.

その他のpastbin系サービスを使いたい場合いろんなコマンドがあります.最近は pastebinit を使っています.
このコマンドの対応サービスはこんなかんじです.

$ pastebinit -l
Supported pastebins:
- cxg.de
- fpaste.org
- p.defau.lt
- paste.debian.net
- paste.drizzle.org
- paste.kde.org
- paste.openstack.org
- paste.pocoo.org
- paste.pound-python.org
- paste.ubuntu.com
- paste.ubuntu.org.cn
- paste2.org
- pastebin.com
- pastie.org
- pb.daviey.com
- slexy.org
- sprunge.us
- yourpaste.net

ちなみにこのへんのコマンドを使うまではクリップボード操作アプリを使ってました.
$ cat file | xclip とかするとクリップボードにファイルの内容がコピーされるのでこれをブラウザ上のテキストエリアに貼り付けたりしていました.

6月 25

Lingr の bot を作ってみた

鹿児島らぐLingr room を作ってみたので,そこにML のSubject を流すbot を設置してみました.

こちらにページに作り方が載っています.bot用のAPI があるので楽々です.

bot 登録

以下のページでbot を登録します.

  • “Lingr” http://lingr.com/bot/create

    • Bot id : 任意
    • Callback URL : このURL にroom の内容が飛んできます.その内容から反応したりすることが出来ます.とりあえず最低限HTTP で200 を返すものを用意して指定.

メッセージ受信用のcgi を作成

ひとまず受け答えはしないつもりなのでHTTP 200 を返すだけのScript を用意.


投稿テスト

get だけで投稿できるので試しに投稿してみます,

以下のページで情報が入手できます.

“Lingr” http://lingr.com/developer

bot_verifier は載っていませんが,bot ID とSecret から求められます.
KagolugML_botxxxxxxxxxxxxxxxxxxxxxxxxxxx を結合した文字列をsha1 にかけます.

$ echo -n 'KagolugML_botxxxxxxxxxxxxxxxxxxxxxxxxxxx'|sha1sum 
b3c03556dca8dfffb8c509cb709817044c98ad87  -

この場合 b3c03556dca8dfffb8c509cb709817044c98ad87bot_verifier です.

  • 投稿先のroom : kagolug
  • bot ID : KagolugML_bot
  • bot_verifier : b3c03556dca8dfffb8c509cb709817044c98ad87

以下のようにアクセスしてみるとroom にメッセージが投稿されました,

w3m -dump ‘http://lingr.com/api/room/say?room=kagolug&bot=KagolugML_bot&text=はろーわーるど&bot_verifier=b3c03556dca8dfffb8c509cb709817044c98ad87

メールからLinger に投稿

鹿児島らぐのML だけを登録したメールアドレスを用意.そのアドレスの .forward に以下のSctipt を呼ぶように "|exec /home/mk/bin/ml2lingr.pl" のような感じで設定しておきます,後はメールが届くとこのScriptが呼ばれてRoom に投稿されます.


※bot_verifier はダミーです.

てことでirc のbot とか書くよりずっとお手軽に書けました.
今回は単に投稿するだけですが,cgi でroom のメッセージを解析して反応するとかするとbot らしくなりますね.

6月 18

gnupgの鍵に新しいメールアドレスを登録

たまにしかやらないのでメモ.

鍵ID 572E53 matoken@kagolug.org を登録します.

$ gpg --edit-key 572E53
gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Secret key is available.

pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.
com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>

gpg> adduid
Real name: KenichiroMATOHARA
Email address: matoken@kagolug.org
Comment:
You selected this USER-ID:
    "KenichiroMATOHARA <matoken@kagolug.org>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O

You need a passphrase to unlock the secret key for
user: "K.I.Matohara <matoken@gmail.com>"   
4096-bit RSA key, ID 572E532C, created 2010-03-17

gpg: gpg-agent is not available in this session
gpg: Invalid passphrase; please try again ...

You need a passphrase to unlock the secret key for
user: "K.I.Matohara <matoken@gmail.com>"   
4096-bit RSA key, ID 572E532C, created 2010-03-17


pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ unknown] (4)  KenichiroMATOHARA <matoken@kagolug.org>

gpg> 4
pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate  
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ unknown] (4)* KenichiroMATOHARA <matoken@kagolug.org>

gpg> sign
"KenichiroMATOHARA <matoken@kagolug.org>" was already signed by key 572E532C
Nothing to sign with key 572E532C

gpg> list

pub  4096R/572E532C  created: 2010-03-17  expires: never       usage: SC
                     trust: ultimate      validity: ultimate  
This key was revoked on 2014-02-11 by RSA key 572E532C K.I.Matohara <matoken@gmail.com>
sub  2048R/E0FE9E3E  created: 2011-02-23  revoked: 2014-02-11  usage: S
[ultimate] (1). K.I.Matohara <matoken@gmail.com>
[ultimate] (2)  [jpeg image of size 2077]  
[ultimate] (3)  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
[ unknown] (4)* KenichiroMATOHARA <matoken@kagolug.org>

gpg> save

確認

$ gpg --list-keys kagolug
gpg: checking the trustdb     
gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
gpg: depth: 0  valid:  12  signed:  55  trust: 0-, 0q, 0n, 0m, 0f, 12u
gpg: depth: 1  valid:  55  signed:  52  trust: 55-, 0q, 0n, 0m, 0f, 0u
gpg: next trustdb check due at 2014-07-20
pub   4096R/572E532C 2010-03-17
uid                  K.I.Matohara <matoken@gmail.com>
uid                  [jpeg image of size 2077]
uid                  Kenichiro MATOHARA <matohara@gdnewhat-jp.org>
uid                  KenichiroMATOHARA <matoken@kagolug.org>

間違ってたら教えてください><

6月 18

自分のPCにキーロガーを設定する

キーロガー.人のPCに仕掛けるのはまずいけど自分の&自分しか使わないPCで試す分には問題ないだろうということで入れてみてます.

入れているのは以下の logkeys

導入方法

DebianやUbuntu だとパッケージがあるので logkeys パッケージを導入するだけ.

% sudo apt-get install logkeys

初期設定

/etc/default/logkeys という設定ファイルを設定します.

ENABLED=1
LOGFILE=/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`

# This should be updated according to your hardware
# Check README.Debian for more info
DEVICE=/dev/input/event0
  • ENABLED : 0 起動しない / 1 起動する
  • LOGFILE : ログファイルの指定
  • DEVICE : キーボードデバイス指定

自動起動してログファイルの設定,ログするキーボードデバイスの指定をします.
ログファイルは他の人から読まれないようにパーミッションを設定しておきましょう.ファイル名は試しに

/home/mk/.logkeys/`/bin/date +%Y%m%d-%H%M%S-$$`

とか書いてみたら行けました.試してみるもんですね.これで起動毎に新しいログファイルが作成されるはずです.
キーボードデバイスは /proc/bus/input/devices を見たり,実際のデバイスを cat してキー入力してみたりして見つけます.
詳細は /usr/share/doc/logkeys/README.Debian に書かれています.

以下の/proc/bus/input/devices では,頭のがkeyboad のようです.

I: Bus=0011 Vendor=0001 Product=0001 Version=ab54
N: Name="AT Translated Set 2 keyboard"
P: Phys=isa0060/serio0/input0
S: Sysfs=/devices/platform/i8042/serio0/input/input0
U: Uniq=
H: Handlers=sysrq kbd event0 
B: PROP=0
B: EV=120013
B: KEY=402000000 3803078f800d001 feffffdfffefffff fffffffffffffffe
B: MSC=10
B: LED=7

I: Bus=0019 Vendor=0000 Product=0005 Version=0000
N: Name="Lid Switch"
P: Phys=PNP0C0D/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0D:00/input/input3
U: Uniq=
H: Handlers=event2 
B: PROP=0
B: EV=21
B: SW=1

I: Bus=0019 Vendor=0000 Product=0003 Version=0000
N: Name="Sleep Button"
P: Phys=PNP0C0E/button/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0C0E:00/input/input4
U: Uniq=
H: Handlers=kbd event3 
B: PROP=0
B: EV=3
B: KEY=4000 0 0

I: Bus=0019 Vendor=0000 Product=0001 Version=0000
N: Name="Power Button"
P: Phys=LNXPWRBN/button/input0
S: Sysfs=/devices/LNXSYSTM:00/LNXPWRBN:00/input/input5
U: Uniq=
H: Handlers=kbd event4 
B: PROP=0
B: EV=3
B: KEY=10000000000000 0

I: Bus=0010 Vendor=001f Product=0001 Version=0100
N: Name="PC Speaker"
P: Phys=isa0061/input0
S: Sysfs=/devices/platform/pcspkr/input/input6
U: Uniq=
H: Handlers=kbd event5 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0019 Vendor=17aa Product=5054 Version=4101
N: Name="ThinkPad Extra Buttons"
P: Phys=thinkpad_acpi/input0
S: Sysfs=/devices/platform/thinkpad_acpi/input/input8
U: Uniq=
H: Handlers=kbd rfkill event6 
B: PROP=0
B: EV=33
B: KEY=18040000 0 10000000000000 0 1501b00102004 c000000001104000 e000000000000 0
B: MSC=10
B: SW=a

I: Bus=0003 Vendor=04f2 Product=b217 Version=0854
N: Name="Integrated Camera"
P: Phys=usb-0000:00:1a.0-1.6/button
S: Sysfs=/devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.6/1-1.6:1.0/input/input9
U: Uniq=
H: Handlers=kbd event7 
B: PROP=0
B: EV=3
B: KEY=100000 0 0 0

I: Bus=0019 Vendor=0000 Product=0006 Version=0000
N: Name="Video Bus"
P: Phys=LNXVIDEO/video/input0
S: Sysfs=/devices/LNXSYSTM:00/device:00/PNP0A08:00/LNXVIDEO:00/input/input10
U: Uniq=
H: Handlers=kbd event8 
B: PROP=0
B: EV=3
B: KEY=3e000b00000000 0 0 0

I: Bus=0001 Vendor=14f1 Product=506e Version=0001
N: Name="HDA Digital PCBeep"
P: Phys=card0/codec#0/beep0
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/input/input11
U: Uniq=
H: Handlers=kbd event9 
B: PROP=0
B: EV=40001
B: SND=6

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=8"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input18
U: Uniq=
H: Handlers=event10 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=7"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input17
U: Uniq=
H: Handlers=event11 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH HDMI/DP,pcm=3"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input16
U: Uniq=
H: Handlers=event12 
B: PROP=0
B: EV=21
B: SW=140

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input15
U: Uniq=
H: Handlers=event13 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Headphone"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input14
U: Uniq=
H: Handlers=event14 
B: PROP=0
B: EV=21
B: SW=4

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Dock Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input13
U: Uniq=
H: Handlers=event15 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0000 Vendor=0000 Product=0000 Version=0000
N: Name="HDA Intel PCH Mic"
P: Phys=ALSA
S: Sysfs=/devices/pci0000:00/0000:00:1b.0/sound/card0/input12
U: Uniq=
H: Handlers=event16 
B: PROP=0
B: EV=21
B: SW=10

I: Bus=0011 Vendor=0002 Product=0007 Version=01b1
N: Name="SynPS/2 Synaptics TouchPad"
P: Phys=isa0060/serio1/input0
S: Sysfs=/devices/platform/i8042/serio1/input/input7
U: Uniq=
H: Handlers=mouse0 event17 
B: PROP=5
B: EV=b
B: KEY=e520 10000 0 0 0 0
B: ABS=660800011000003

I: Bus=0003 Vendor=0000 Product=0000 Version=0004
N: Name="ACPI Virtual Keyboard Device"
P: Phys=
S: Sysfs=/devices/virtual/input/input20
U: Uniq=
H: Handlers=sysrq kbd rfkill event18 
B: PROP=0
B: EV=3
B: KEY=ffffffffffffffff ffffffffffffffff ffffffffffffffff fffffffffffffffe

I: Bus=0011 Vendor=0002 Product=000a Version=0000
N: Name="TPPS/2 IBM TrackPoint"
P: Phys=synaptics-pt/serio0/input0
S: Sysfs=/devices/platform/i8042/serio1/serio2/input/input19
U: Uniq=
H: Handlers=mouse1 event19 
B: PROP=0
B: EV=7
B: KEY=70000 0 0 0 0
B: REL=3

I: Bus=0003 Vendor=046d Product=0a29 Version=0111
N: Name="Logicool Logicool Wireless Headset"
P: Phys=usb-0000:00:1d.0-1.1/input3
S: Sysfs=/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.1/2-1.1:1.3/0003:046D:0A29.000A/input/input27
U: Uniq=000d44b85a7d
H: Handlers=kbd event1 
B: PROP=0
B: EV=1b
B: KEY=18000 17800000000 8e000000000000 0
B: ABS=ffffff0000000000
B: MSC=10

H: Handlers=sysrq kbd event0 から実際のデバイスは /dev/input/event0 なので,これをcat して何かキーボード入力して反応があるか確認します.当たりのようです.

% sudo cat /dev/input/event0
�w�S��      �w�S��      �w�S��                  �w�S?�w�S?�w�S?p     a�w�SK
�w�SK
�w�SK
�w�w�S��.�w�S��.�w�S��     a�w�S(�^C

実際に使ってみると当たり前ですが入力したものがログファイルに吐かれています.もちろんパスワードなどもそのまま.
日本語入力したものなどはローマ字入力なのでローマ字で記録されています.フィルタにかけると読みやすくなりますね.メタ文字も<lctrl>&ltup><down>のような感じで記録されます.
root で動いているのでユーザを変更しても記録されます.
デバイスを指定しているので,外付けのキーボードを接続すると記録されません.

ちなみにプロセスはこんな感じなので色々丸見えですね.

% ps -ef| grep -i logk
root      1433     1  0  6月10 ?      00:00:25 /usr/bin/logkeys -s -u -d /dev/input/event0 -o /home/mk/.logkeys/20140610-222504-1004

キーロガーへの対策

このlogkeys であれば別のキーボードを使えば回避できます.でも全部のデバイスを記録するソフトウェアキーロガーだと回避できません.OS をLiveCD/USB などで別のものを起動してしまえば回避できます.

ソフトウェアでなく,ハードウェアキーロガーもあります.これはUSB やPS/2 ポートのキーボードの間に取り付けてロギングするものです.OS を変えても回避できません.わかりやすいものはPCの裏を見るだけで何かついてるのですぐわかりますが,キーボードの中やPC 筐体の中に仕込まれると一見しただけではわかりません.
仕込んだロガーを回収してログを回収する必要があるのですが,無線方式のものだと現地に行かなくても無線経由で回収できるので犯人の追跡も難しいです.

ちなみにそんなに特殊なものでなく普通にあちこちで売っています.おまけに安価.

画面を飛ばすものまであります.テンペストを使うよりずっとお手軽で実用的ですね><

ということで,外の端末ではセンシティブな情報は入力しないくらいしか対策は無さそうです.