ScalaでSSHハニーポットを作ってみた

グローバルIPを持っているサーバで、sshのポートをデフォルト(22番)のままで運用していると、ログイン失敗のログがたくさん出るので、どんなアクセスが来ているのか見てみたくてSSHハニーポットを作ってみました。

SSHハニーポット

ハニーポットとはわざと不正アクセスを受け入れるおとりのようなものです。手法や傾向の調査に使われる事が多いです。

SSHだとkippoというOSSが有名ですね。昔ハッカージャパンで読んだような記憶があります。 desaster/kippo · GitHub

kippoはsshのログイン情報を保存するだけでなく、ログインさせ、その後そのサーバ内でどのような行動をしたのかのログまで残せたりするのですが、今回はログイン情報のみ保存するものを作りました。

sippo

Scalaで書いてみたので、sippoって名前にしてみました。

sshのアクセスが試行される度に、タイムスタンプ, 送信元IP, 送信元ポート, ユーザ名, パスワードが保存されます。

github.com

個人所有している某サーバに設置してみたのですが、2日で400回くらいアクセスが来ました。(IPアドレスの第1, 2オクテットは伏せておきます)

f:id:kuro_m88:20150727230514p:plain

しばらく置いておいてどんなid / passwordが多いのか集計してみたいですね。

実行方法

ビルド済のjarファイルを置きましたので、javaさえ動く環境だった動くと思います。(MacLinuxでのみ確認)

$ mkdir sippo
$ wget https://github.com/kurochan/sippo/releases/download/v0.1/sippo-0.1-SNAPSHOT.jar
$ java -jar sippo-0.1-SNAPSHOT.jar

これで、10022番ポートでsshハニーポットが起動します。
アクセスログは、実行時のカレントディレクトリ以下のlogs/ssh.logにタブ区切りで保存されます。
また、1日おきにログファイルがローテーションされてgzip圧縮されます。

22番ポートで待ち受けるには

まず、本物のsshdの待ち受けポートは変えておく必要があります。

Linuxであれば、iptablesをつかってポートフォワーディングしてあげるとよいのではないでしょうか。

$ sudo iptables -A PREROUTING -t nat -p tcp --dport 22 -j REDIRECT --to-port 10022

面倒くさい場合のために、一応22番で起動するjarも用意しています。rootで起動する必要がありますが…

Release First Release · kurochan/sippo · GitHub

その他

待ち受けポートの設定とログディレクトリの指定くらいは起動オプションか設定ファイルで指定できるようにしたいですね。

サイバー用語 50本ノック

新卒として入社して2ヶ月ちょっと経ったので、何か書いてみようと思ったので、書いてみました。
今は渋谷でITエンジニアをしています。

どの企業にも文化というものがあって、会社や業界ごとに特色があるんじゃないかと思いますが、その中でも、うちの会社は共通言語というものが特徴的なようです。
共通言語はコミュニケーションを円滑にしてくれる一方、外部の人から見たら何を言っているのかさっぱりわからなかったり、内部の人は当たり前に使っていて、独特なものだということに気づかない場合もあるんじゃないでしょうか。
完全に慣れていないうちの自分が持った印象って大事ですよね。

ということで、入社してから覚えた言葉を50個挙げてみました。(もし解説が間違っていたらやさしく教えてください)
思いついた順番に書いたので、順番に特に意味はありません。
たくさんあるので、テンポよくいきましょう!

1. それでいうと

一番最初に覚えました。「ちなみに」と同義ですが、「ちなみに」と言うより「それでいうと」と言った方が会話にスムーズに入れる不思議な言葉です。

内定者としてバイトをしているときに気がついたら自分も使っていました。

2. ぶち上げ

ぶち上げましょう!

3. 爆上げ

ぶち上げるどころじゃないです。爆上げです。

4. 下からの突き上げ

若い世代が勢い良く突き上げてくるときに使われる事が多いです。

5. グロース

成長のことです。

6. 爆グロ

爆発的グロースの略です。

7. 足元

直近と同義です。

8. 腹落ち

納得が行くことですが、腹落ちと言うことの方が多いです。

「◯◯先輩のお話を聞いてようやく腹落ちしましたよ〜」

9. ダカイギ

打開するための会議です。

10. ダカイゼン

打開 x 改善 = ダカイゼン

余談ですが、「ダカイの間」と「カイゼンの間」という会議室があります。

11. フルコミット

全力で取り組みます。

12. 暗闇の中でジャンプ

暗ジャンと略されたりします。 ameblo.jp

13. スケール

規模と同義です。

14. キラキラ

輝きます。

15. ギラギラ

もっと輝きます。

16. (誰々に) 当てる

案だしなどで、方向性を確認するために、評価をしてくれる人に発表前に案を見せてみて、アドバイスをもらいます。

17. やったります

やってやります!

18. 確度を上げて

より確実なものにします。

19. 目線を上げる

同じような意味で視点という言葉も使われます。

20. 温度感

急ぎなのか、重要なのか、そうだとしてもどれくらいの事なのか。

「そこらへんの温度感把握しておきたいですね」

21. 朝会

「あさかい」と読みます。「ちょうかい」ではないです。

22. 合宿

合宿といっても、どこかへ泊まることもありますし、社内の会議室等を1日貸しきる事もあります。

23. MC FP YT PP

オフィスの略称です。

MC = 渋谷マークシティ, FP = 渋谷ファーストプレイス, YT = 渋谷YTビル, PP = 渋谷プライムプラザ www.cyberagent.co.jp

24. 集中しMAXタイム

最大限集中します。この時間はできるだけそっとしておいてください。

25. 前のめり

やる気の現れです。

26. PS

PS = プロジェクト責任者

27. リラク

リラクゼーションスペースの略。休憩ができるようなスペースです。

28. 勝負所

勝負所を見極めましょう。

29. 今今

今今 = 今

30. ほぼほぼ

ほぼほぼ = ほぼ

31. ギネス

過去最高記録の事です。基本的に社外には非公開だと思います。 ameblo.jp

32. スピード感

IT業界はスピードが大事です。

33. 麻雀

社長が強いです。 「運を支配する」事が大事です。 ameblo.jp

34. 爪痕

自分がそこに存在した証拠を成果等で残します。

35. ◯◯したく。

体言止めです。

思わず「拝承!」と返事したくなりますが、そういう感じではないっぽいです。

「〜をお願いしたく。」

blogs.wankuma.com

36. 息をとめる

踏ん張ります。

「ここは息止めて頑張ろう」

37. 着地

月末や締め切りでの売上や成果のことです。

38. ど真ん中

ど真ん中 = 中間地点

39. ストレッチ

頑張ればここまで伸ばせるだろうという予測。

最近、「着地ど真ん中ストレッチ」という3連コンボな言葉を聞いて衝撃を受けました。

40. 着予

着地予測のことです。

41. ヨミ

予測のことです。

42. ナリ

成り行きのことです。

43. パツる

予定がかなり詰まっていたり、遅れていることです。

44. フレッシュ

Fresh!! 今期のスローガンです。

45. 横展

ヨコ展開の事です。

既存の上手く行ってる施策等を他の分野やプロジェクトにも展開します。

46. ぐいぐい

ぐいぐい行きます!

47. ゴリっと

力強く、一気に推進します。

48. 刺さる

心に突き刺さります。

広告業界だとよく使われる印象があります。

「この広告はユーザに刺さりやすい」

49. 日販

日毎の売上です。

「昨日の日販は〜」

50. 圧倒的

他を寄せ付けません。

圧倒的成長するぞ!

参考

ameblo.jp

LXCの非特権コンテナを別ホストに移行する

Ubuntu14.04の非特権コンテナをUbuntu14.10にマイグレーションしようとして、ちょっとだけハマったので、移行手順をまとめておきます。

一度必要な設定をやってしまえば、移行は簡単でした。

旧ホスト(Ubuntu14.04)側

コンテナのバックアップ

コンテナの停止

今回はmysqlという名前のコンテナを移行してみたいと思います。

コンテナを実行しているユーザでログイン(ここではcontainer)

移行したいコンテナが停止している事を確認

STATEがRUNNINGになっていたら、lxc-stop -n {コンテナ名}で止める

$ lxc-ls --fancy
NAME     STATE    IPV4       IPV6  GROUPS  AUTOSTART
----------------------------------------------------
develop  STOPPED  -          -     -       YES
mysql    STOPPED  -          -     -       YES

コンテナを固める

$ tar zcvf mysql.tar.gz /home/container/.local/share/lxc/mysql
$ ls
mysql.tar.gz

コンテナを新しいホストに転送する

移行先ホストでもcontainerユーザで稼働させる前提です。

$ scp mysql.tar.gz container@{移行先ホストのIP}:/home/container

新ホスト(Ubuntu14.10)側

containerユーザでログインします。

LXCのインストール

$ sudo aptitude install lxc

LXCの設定

NICが10個まで使えるように設定

$ sudo sh -c 'echo "container veth lxcbr0 10" >> /etc/lxc/lxc-usernet'

コンテナを展開するディレクトリの作成

$ mkdir -p /home/container/.local/share/lxc

転送したコンテナの展開

--numeric-ownerをつけてuid/gidを保持するのがポイントです。

$ sudo tar --numeric-owner -xpzf /home/container/mysql.tar.gz -C /home/container/.local/share/lxc
$ sudo chown container:container /home/container/.local/share/lxc/{mysql,mysql/config}

使用するsub uid/gidの割り当て

コンテナで使用しているsub uid/gidを確認

以下のコマンドで、設定ファイルから探します

$ cat /home/container/.local/share/lxc/mysql/config | grep lxc.id_map
lxc.id_map = u 0 234071 65536
lxc.id_map = g 0 234071 65536

ここでは234071という数値と65536という数値がそれぞれ、sub uid/gidと、idを何個使うかを表しています(環境によってこの数値は違います)。この数値を覚えておいてください。

sub uid/gidの追加

今探した数値を使用します。 範囲で指定するので、今回の場合は234071〜299607です。 後半の数字は、234071 + 65535で求められます。

sudo usermod -v 234071-299607 -w 234071-299607 container

これで移行は完了です。

コンテナの起動

移行ができましたので、あとは通常どおりコンテナを起動するだけです。

$ lxc-start -n mysql

まとめ

普通にディレクトリごとコピーするだけではsub uid/gidが環境によって異なるため、設定をしないと動きませんでした。

ポイントとしては、

  • tarの展開時に--numeric-ownerを付ける
  • usermodコマンドでsub uid/gidを設定する

以上です!!動いてよかった!

brew caskで夜フクロウをインストールしようと思ったらできなかった

Macbrew caskで夜フクロウをインストールしようと思って、いつもどおりにinstallしようとしたら…

$ brew cask search yorufukurou
Error: No available Cask for yorufukurou
Error: nothing to install

失敗した。
Githubリポジトリがどうなっているのか見てみると、どうやら"yorufukurou"ではなく、"night-owl"に名前が変わったらしい。

github.com

気を取り直してもう一回。

$ brew cask search night-owl

成功!!