ロマンティック・アイロニー

好きなこと・気になったことについて書いていきます!

人生のコンパス 〜「幸せ」編〜

はじめに

 前回の「人生のコンパス〜「学び」編〜」に引き続き、今回は「幸せ」について考えてみた。

nonkuru.hateblo.jp

 現在の世界の人口はおよそ74億3000万人。それぞれに文化的、思想的、身体的な差異があるが、唯一全世界の人に共通するのは「幸せになりたい」という想いではないだろうか。約7万年前に起こった認知革命以後、人類は「本能的に生きる」だけではなく「幸せに生きる」ということを探求してきたはずだ。しかし未だに「幸せ」の明確な定義はない。(数学で最大の難問とされていた「フェルマーの最終定理」でさえ360年で解けたのに)。

「幸 ー 幸せ」

【「幸せ」には種類がある】

 「幸せ」について考えていて最初に思ったことは、「幸せ」を捉え難くしているのはなぜだろうかということである。なぜ捉え難いのかは、「幸せ」の定義が年齢・経験・信仰によって変化するからだと思った。そこで、定義はできないかもしれないが、世の中で幸せと言われているものを分類することはできるのではないかと思った。
 まず幸せには大きく2種類あると思う。1つ目が「インスタントな幸せ」、2つ目が「根源的な幸せ」である。

インスタントな幸せ

 利己的である。幸せと感じる時間が短い割に、幸せと感じる閾値がどんどんと高くなってしまう。そのため再現性がない。例えば、生まれて初めて買った車の喜びはその1回その瞬間がピークであり、二度とその喜びは得られない。車を所有していることが日常化してしまうからだ。薬物にも似た即効性や依存性があるように思う。その代表格が「お金」である。お金の力を使って自分の幸せを演出することはできても、それは本物ではない虚像にすぎないので要求レベルが上昇し続けいづれ破綻してしまう。しかし、一定の水準までは実際にこうした富が幸せをもたらしてくれるというのも事実だ。

根源的な幸せ

 利他的である。他人との関わりの中で得られる幸せが多い。そのためすぐに得られるものではない可能性がある。根源的な幸せの中にもさらにいくつかの種類がある。

  1. 信頼のおける関係性を構築する幸せ
    一緒にいるだけで嬉しい、信頼、生理的欲求・安全欲求・社会的欲求

  2. 他人や社会に貢献する幸せ
     他を思いやることで自らの幸せを引き出せる、尊厳欲求自己実現欲求

  3. 時間を忘れて没頭する幸せ
     フロー状態、自己超越

またWikipediaには以下のような記述があった。  

1990年代の研究による様々な統計的データによって明らかになったことは、幸福感の基線を決めるのは、環境の客観的な条件ではなく、個々人の内的特徴(「信仰心」や「ものの考え方」など)である、ということである(「主観的厚生」と呼ばれているらしい)。また、幸福感を持っている人に共通する内的な特徴は4つあり、その4つとは ①自分自身のことが好きであること、②主体的に生きているという感覚を持てていること、③楽観的であること、④外向的であること、であると指摘されている。また、人は価値のある活動に積極的に参加し、自身のゴールをめざして前進するときに、より多くの幸福を感じることができる。引用:Wikipedia

これを踏まえると、 西野亮廣さんの以下の言葉に集約されると思う。

『幸福度は「クオリティ」ではなく「伸び率」で決まる。』

【「幸せ」に対する様々な立場】

生物学

 生物学において「幸せ」とは、体内における「快感」である。つまり外的要因は関係ない。神経やニューロンシナプスによって生じる脳内の電気信号やセロトニンドーパミンオキシトシンのようなさまざまな生化学物質にのみによって生じる快感が幸せの正体であるという。しかしその快感指数の標準設定値は人によって異なる。感動的な映画を鑑賞して快感を覚える人もいれば、それほどでもない人もいる。骨折をしてとても落ち込む人もいれば、それまでと大して変わらない人もいる。そして一時的に快感を得られても、人の感情はいずれ元の設定値に戻ろうとする。いわゆる「慣れ」が訪れる。

意義論

 ドラマや映画ではしばしば日々の生活にやる気のない主人公がひょんなことから周囲の人々に巻き込まれ、仕方なく付き合っているうちに自分の楽しみを見つけ最後には活力ある主人公に変わるというものがある。これはまさに自分の人生に生きる意義を見つけた典型的な例だ。またよく聞く話として、子育ては大変だけど成長を見られるのは幸せなことだというものだ。これが示しているのは、幸せとは「不快な時間」が「快い時間」を上回っていることではないということだ。そもそも科学的には人生に生きる意味はない。偶然生まれた地球の上での気まぐれな生物の進化の過程でしかない。しかし死後の世界を信じている人はそうでない人と比べて幸せだと思う。幸せとは自分が生きる意義はこれだと信じられるかどうかにかかっている。それは自己欺瞞にもなるかもしれない。

宗教や哲学(とくに仏教

 仏教では、刻一刻と変化する感情に対して「快い感情」を求めるということ、それ自体が「不快」であるとしている。つまり束の間の感情を空しく追い求め続けることこそ諸悪の根源である。そのことを理解し、束の間の感情の為に生きることをやめた時にはじめて心の平穏が訪れるというのだ。仏教用語では「涅槃(ねはん)」と呼ばれる境地である。さらに仏教では、本当の自分は何者かを理解することが幸せへの道しるべであるとしている。もしそうだとすると、経済的・物質的豊かさは「幸せ」とは関係ないのかもしれない。

期待感

 幸福は「期待」に左右される。主観的な「期待」と客観的条件の相関関係によって決まる。つまり何かを期待し、その期待が満たされると、幸福になる。一方、期待が満たされないと、不幸を感じる。しかし、生活状況がよくなれば、期待も上がっていく。心理学の分野では、人間は達成や楽しみを経験している時に、「満足」ではなく、「もっと欲しい」と感じることがわかっている。「もっと欲しい」という反応を示している限り、満足することはない。個人のレベルでもそうだが、集団でもそうなっている。30点だと思っていたテストの結果が80点だととても嬉しいが、90点だと思っていたテストが93点でも大して嬉しくはならない。反対に、骨折をしてしまうとその後の生活の期待は小さくなってしまうので生活水準が多少下がっても幸福度はさほど下がらないが、宝くじが当たるとその後の生活の期待が大きくなってしまうので生活が多少良くなっただけでは満足感は得られない。周囲のマスメディアや広告から得られる「期待感」はむしろ現代の人々、もっと言うと先進国人々の幸福度を下げている要因になのかもしれない。

 これら4つの立場の見解は、どれか一つが正解というわけではなくどれもが複雑に絡み合っているように思う。

さいごに

 今回は「幸せ」について考えてみたが、あえて何か答えを出すとしたら「信じる」に集約されると思った。人類は物語を想像しそれを信じることで繁栄してきた。そしてその「信じる」という能力こそが人が人であるということならば、人生に意味があるのか、ではなく人生という意味を自分で創造することがこれからの幸せにつながるのだと思う。近代の人々は何を幸せと信じていたのかを考えてみると意外に答えは身近にあった。そのひとつは資本主義だ。資本主義者は、経済成長と物質的豊かさを実現し、人々に自立と進取の精神を教え諭すことによって、自由市場だけが最大多数の最大幸福をもたらすこができると主張した。より豊かで健康になれば、人々はより幸せにもなるはずだと。また科学者は知的好奇心を満たすことや人類の知識量を増大させる人生に意義があると信じている。政治家はより良い国にしていくことこそ自らの人生の意義だと信じている(はず)。

 改めてこれから自分は何を信じて生きていきたいのかを考えてみた。それは「信用主義」だと思う。暗号通貨やクラウドファンディングVALUというテクノロジーやサービスによって個人とそのつながりがクローズアップされる時代になってきた。そんな時代に「嘘」をつくことのリスクは大きい。デジタルネイティブは気づいている。テレビは「予定調和」だと。お金やクレジットは本物の信用ではない。これからは人間関係の中で生まれる本物の信用を獲得して行くことが大切ではないかと思う。

そしてその信用を糧により多くの利他に貢献することが結果的に満足感や自己肯定感、承認欲求を満たすことになり結果的に自分の幸せにつながるのだと思う。

人生のコンパス 〜「学び」編〜

はじめに

 今年の夏休みは2社インターンシップに参加した。その2社は大手企業とベンチャー企業だった。また分野の違うインターンシップの報告会にもほんの少し関わった。そして、これまで何度かやってみたいなと思っていたがあまり優先度が高くなかった「ヒッチハイク」にも挑戦してみた。そんな中でいろいろな方と話し、見て、感じたことで「自分が本当に欲しているモノはなんだろうか」「どんな企業に行きたいのか」「これから何をしていきたいのか」等を夏休みの振り返りも兼ねてじっくり考えておきたいと思った。石段の家プロジェクトリノベウィークにも参加したい気持ちもあったが、あえて一人で時間をかけて考えてみる方が今後のためにも良いのではないかという直感が働いたので今回はお断りさせて頂いた。

 というわけで、これまであまり明確に考えてこなかったコトや疑問に思っていたことを改めて考えてみることにした。まだまとめ終わっていない、考えきれていないところもあるが、完成を待っているといつまでも公開できないと思ったので途中ではあるがとりあえず公開してみることにした。そこでもしコメントがもらえればそこからさらに深めるヒントにもなると思った。また一度に全てを書くと読むのが億劫になってしまうと思ったので、いくつかに分けて投稿していきたいと思う。                                                                                ※文章のつながりがない部分も散見されると思いますが、優しい目で意味を汲み取って頂ければと思います。

「学 ー 学び」

【何のために”大学”へ行くのか】

 結論からいうと「幼少からの環境に依存した思考の枠」「臆見」を認識して、それらにとらわれずに考える術を学び、思考をリベレイト(自由に)することにあると思う。一言で言うと「批判的思考力」だ。社会の多くのモノ・コトは人類の想像によって生み出されたものだ。言語しかり貨幣・宗教・資本主義・会社・株式その他多くの思想や芸術作品。これらは地球においては必要なものではないが、人が ”集団”で生活し繁栄するうえで重要なものだ。しかしその想像力のおかげで偽の情報が生まれたり、生まれた時には既にあったルールを常識と認識して思考の牢獄にとらわれてしまったりする。そこから脱出するために「批判的思考力」を養う必要がある。そして、より聡く、より敏感に、より自由に、より満たされて生きられるように自己を確立していくことが必要である。書物、知識、芸術作品や思索が生んだ作品、さらに周りの仲間たちがそれぞれのやり方で自分の答えを探そうとしていることから感じるプレッシャー。それらすべてが刺激し、混乱させ、妨害することによって、それまでの人生を根底から覆すような経験が必要ではないか。そう考えると、今の大学を楽しくないと思ってしまうのは「感情の揺さぶり」が少ないことが原因ではないかと思う。

【なぜ ”大学で” する必要があるのか】

 大学は「現実社会とはかけ離れた特別な場所」だからである。両親という安全基地から離れ、生き馬の目を抜くような社会とのはざまで冷静に考えられ、「社会」を客観視できる環境にある。大学は、考えることを学べる最初の場所でなければ、最後の場所でもないが、最高の場所であると思う。

【どうすればよいか】 

 まず基本的なことだと思うが専攻に限らず興味を持ったこと・疑問に思ったことや常識だとされていることについて調べてみることにあると思う。そのうえで意識的に「ロマンティック・アイロニー」を確保することだ。ロマンティック・アイロニーとはドイツ・ロマン派の思想家フリードリヒ・シュレーゲルが提唱した概念である。直訳すると「浪漫的皮肉」。その説によると、なんでも天才というものは、何の目的もなく、意識して努力することもなく、終日あてもなくぶらぶら歩き回らなくてはならないというものだ。さすがにこれは誇張されたまさに皮肉のようにも聞こえるがこれの意味するところは、意識的に「ぶらぶら散歩する」や「河川敷に寝転んで空をみる」「ぼんやり山を眺める」のような何にもしない時間をとることの重要性を言っているのではないかと思う。最近の脳科学の研究では、先ほど挙げたような特に何もしていない時間に、脳のDMN(デフォルト・モード・ネットワーク)と呼ばれる回路が活性化し記憶の関連付けや消去などの活動が行われているという説があるらしい。情報が錯綜し脳の休まる時間が減った現代だからこそあえてそのような時間を作り、自分を内観してみる。そういうことを繰り返す行うことで、ゴーギャンの代表作『我々はどこから来たのか 我々は何者か 我々はどこへ行くのか』というような根源的な問いができる心の余裕が生まれ、自己の確立に繋がるのではないかと思う。
 また留学すると考え方が変わったという話はよく耳にするが、おそらく「留学」という全く異なる環境に身をおく行為によって自分自身を内観することが多くなり、図らずともこの「ロマンティック・アイロニー」を作り出していたのではないかと思う。「読書」も留学と同じように自らを内観できる機会を提供してくれるが、その効果の持続性はとても短いように感じる。そして母校の呉高専での「インキュベーションワーク」という取り組みも「感情の揺さぶり」という点で有効に働けば良いなと思う。

さいごに

 学部の経験を就職の準備だけのために捧げてしまうのは勿体無いと思う。大学が職業訓練校化しているように思う。専攻科目は他に何も学ばないから専攻なのではなく、他に学ぶからこその専攻ではないか。ここの認識の違いが普段大学の友達との関わりの中で感じていた違和感なのかもしれない。もし大学を出るとき、入ったときと同じまま(同じことを信じ、同じ価値観を持ち、同じ希望を抱き、同じ理由で同じ目標を目指している)なら学位をとると言う意味では成功ではあるが、別の意味で大学をしくじったのかもしれないなとも思う。
 手元にスマホがある時代に同じ時刻に同じ教室に集まって一方向通信の講義を受ける。そこにのっかるコンテンツも全員を同じレベルに揃えて効率的な人間にしようとしてきた。そもそもひとりひとり違う周波数を持っているのに無理に合わせようとするから歪みが生まれてくる。その中で大学は、個性を伸ばす意味でのアンプや個人の内面を知る意味でのフーリエ変換としての機能が今後重要になってくると思った。

Ubuntu16.04にDocker入れてさくっとハニーポット構築(cowrie)

以前からハニーポットを立ててみたかったのだがなかなか機会が見つけられずそのままずるずる時間がたってしまった。しかし最近ちょうど時間もあったので勢いで構築してみた。今回はSSHハニーポットのcowrieを使った。cowrieはkippoの上位互換なので。どこが上位互換なんだよ!って人はSSHハニーポットはKippoではなくCowrieを使え - 日々のおべんきょを参考にしてください。

基本的には DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説 | tracpath:Worksに書いてある通りに進めていった。

構築環境

  • さくらのVPS
  • OS : Ubuntu 16.04
  • メモリ : 1GB
  • HDD : 100GB

Dockerインストール

OSの確認

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu  
Description:    Ubuntu 16.04.1 LTS  
Release:        16.04  
Codename:       xenial

カーネルのバージョン確認

Dockerはカーネルのバージョンが3.10以上でないと動作しないらしい

$ uname -a
Linux ubuntu 4.4.0-42-generic

wgetコマンドがあるか確認

$ which wget
/usr/bin/wget

wgetでDockerダウンロード

$ wget -qO- https://get.docker.com/ | sh

Dockerの動作確認

$ sudo docker run hello-world

dockerグループを作成しsudo権限のあるユーザをグループに追加

$ sudo usermod -aG docker [ユーザ名]

ここで一旦ログアウトもしくは再起動

もう一度Docker動作確認(sudoなしで!)

$ docker run hello-world

先ほどと同じようなメッセージが表示されれば成功 このあと先ほどの参考記事ではgrubの設定をいじっていたがVPSで手元に実機がないうえ、実はVPSを友人と共有していてビビったので行わなかった。(おそらく問題はないと思うが...)

ファイアウォールの設定

Ubuntu16.04ではデフォルトでUFW(Uncompaticable FireWall)という複雑なiptablesをラップするツールがありとても便利なのでこれを利用すると良い。

ファイアウォールが動作しているか確認

$ sudo ufw status
Status: active

エディタでufwの設定変更

$ sudo vi /etc/default/ufw

DEFAULT_FORWARD_POLICYをACCEPTへ変更

DEFAULT_FORWARD_POLICY="ACCEPT" 

ポート2375(tcp)を開放(Dockerのデフォルトポート)

$ sudo ufw allow 2375/tcp

もし22番ポートも閉じていたら開けるのを忘れないように(cowrieで使う)

ファイアウォール設定リロード

$ sudo ufw reload
Firewall reloaded

DNS設定

Dockerの設定ファイルを編集

$ sudo vi /etc/default/docker

外部のDNSサーバ(ここではGoogle)を利用するように以下のコメントを消す

#DOCKER_OPTS="--dns 8.8.8.8 --dns 8.8.4.4"

Docker再起動

$ sudo /etc/init.d/docker restart

これでDockerのインストールは終了! つづいてcowrieの構築。といってもすぐに終わる。

Docker上にcowrie構築

DockerHubから他の人が保管しているcowrieコンテナイメージを探す

$ docker search cowrie
NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
k0st/cowrie                        Cowrie - SSH honeypot based on kippo (mini...   4                    [OK]
dtagdevsec/cowrie                  cowrie                                          2                    [OK]
wonderfall/cowrie                  SSH Honeypot. Based on Alpine Linux.            2                    [OK]
ouspg/cowrie                       Cowrie honeypot based on alpine:latest          1                    [OK]
armbues/netscreen                  SSH honeypot based on Cowrie modified to l...   1                    [OK]
vimagick/cowrie                    A SSH honeypot                                  0                    [OK]
rayson/cowrie                      Cowrie is a medium interaction SSH and Tel...   0                    [OK]
valerianomanassero/cowrie-centos   Docker Image packaging for Cowrie on Centos     0                    [OK]
thechris/cowrie                    A lightly modified version of cowrie            0
viker/cowrie                                                                       0
solson/cowrie                                                                      0
viker/cowrie-kippo                                                                 0

この中から好きなものを選択(今回はk0st/cowrieを使った)

コンテナイメージをローカルにもってくる

$ docker pull k0st/cowrie

コンテナ起動

$ docker run -it -name cowrie -p 22:2222 k0st/cowrie /bin/sh

ここでちょっとdocker runオプションの説明
-it : コンテナ起動後そのままコンテナ内にログイン
-name : コンテナに名前をつける(この名前はコンテナ削除時などコンテナ指定する場合に使用。これを指定していないとデフォルトで付与されるランダムな英数字の文字列で指定しなければいけないためめんどう)
-p : ホストの任意のポートをコンテナの任意のポートへ転送(この場合ホストの22番ポートにきたアクセスをコンテナの2222番ポート(cowrieのデフォルトの待ち受けポート)へ転送)

最後の/bin/shはコンテナ内で使用されているシェル(普通は/bin/bashだがこのk0st/cowrieで設定されているシェルが/bin/shだった)
コンテナから出るときは、

$ exit

ででれる。すでに起動した後にもう一度入りたいときは以下のコマンドで入れる。

$ docker exec -it cowrie /bin/sh

作成したコンテナの確認

$ docker ps -a

cowrieコンテナの削除

$ docker rm cowrie

まとめ

今回はじめてDockerとハニーポットを使用してみてこれはいろいろできそうだなと期待が高まった。(Dockerつよすぎ!!) ハニーポットに関しては侵入してきた攻撃者の動きが動画で再生できるのはとてもおもしろい。今後はkippo-graphなどでデータの可視化にも挑戦したい。

参考

DockerをLinux(Ubuntu 14.04 LTS)にインストールする方法と解説 | tracpath:Works

SSHハニーポットはKippoではなくCowrieを使え - 日々のおべんきょ

Dockerコマンドメモ - Qiita

いまさら聞けないDocker入門(1):アプリ開発者もインフラ管理者も知っておきたいDockerの基礎知識 - @IT

VPSでハニーポット運用はセーフなのか

前々からハニーポットを運用してみたいと思っていたが、金銭的に難しくなかなか機会がなかった。しかし、今回さくらインターネットのクーポン券が手に入ったのでこれを機にはじめよう!...と思った。しかしVPSハニーポット運用は契約的にセーフなのか気になったので調べてみた。(これは個人的な見解なので鵜呑みにしないようにお願いします。)

サービスと規約一覧

>犯罪行為、犯罪行為をそそのかしたり容易にさせる行為、またはそれらのおそれのある行為
→場合によってはアウト?
>当社あるいは第三者の運用するコンピュータ、電気通信設備等に不正にアクセスする行為、クラッキング行為、アタック行為、および当社あるいは第三者の運用するコンピュータ、電気通信設備等に支障を与える方法あるいは態様において本サービスを利用する行為、およびそれらの行為を促進する情報掲載等の行為、あるいはそれに類似する行為
→ビミョーww

まとめ

 結果的にハニーポットを明示的に禁止しているところはなさそう?ただ、運用のミスがありサービスに影響を与えてしまった場合はアウトになりそうなところもあったように思える。(無難にラズパイとかで運用したほうがいいのかな〜)  知見のある方からコメントをいただいたところによると、インバウンド(自鯖にアクセスしてくる悪意のある通信)はセーフだけど、アウトバウンド(自鯖から出て行く悪意のある通信)はアウトみたいです。それと、ハニーポットが見破られて破壊されてももちろんアウト!!  ということなので、運用には十分気をつけましょう。

もしこういう場合はアウトといった情報や経験があればコメントをお願いします。m( )m

セキュリティ・キャンプ全国大会2016に参加した

8/9〜8/13に開催されたセキュリティ・キャンプ全国大会2016に参加してきました。このセキュリティ・キャンプはこれまでに13回開催され約600名もの卒業生を輩出しています。その卒業生の方々は様々な分野で活躍されておられ、私としましては憧れの存在です。そんな先輩方に追いつくべく、耳の穴かっぽじって講義を受けてきました!笑

f:id:n0x2ca:20160815234211j:plain

0日目

私は地方から参戦しましたので、初日の集合時間に間に合わないということで会場兼宿泊施設であるクロスウェーブ幕張に前泊しました。私以外にも数人前泊対象の参加者がおられましたので、一足先に名刺交換させていただきました!この日は明日の準備だけして早めに寝ました。

1日目

 いよいよセキュリティ・キャンプが始まりました!会場へ向かうとさっそく本格的なカメラを向けられ抱負を聞かれました。(テンパって噛みまくったww)既に名刺交換の応酬が始まっていたので 「出遅れた」と思いつつも開講式の時間までひたすら名刺交換していました。(同時に数十人が名刺交換していたので誰と交換したかわからなくなりましたw)
 開講式が終わるとセキュリティ基礎講座や特別講義が行われ、大変興味深いお話を聞くことができました!特に特別講義でのインターポールの福森さんのお話はインターポールという組織の重要性やこれまで自分の中になかった視点の話が聞けてとても面白かったです。講義の後に福森さんと名刺交換させていただき、CDIシャツをいただけることに!!(やったぜ!)
 夕食後は会場に戻りグループワークの説明を受けました。テーマは4つあってその中から私たちのグループは唯一「10年後のIT社会のセキュリティのあるべき姿」を選びました。ちなみにチーム名は『osx』(おーえすえっくす)です。(たまたまグループ全員がMacという奇跡w)読みが「おーえすてん」ではないのはあえて。

2日目

 この日から毎朝8:30に専門講義が始まりました。私が受けた講義は「1-C 公開鍵暗号のハードウェア実装と攻撃〜ICカードが持つ脆弱性とその対策〜」と「2-C 人工知能とセキュリティ」でした。専門講義の後はグループ対抗seccamp CTFが開催されました!!
 1-Cではまず公開鍵暗号の概説があり、そのあと実際に機器を使用してICカードに対してサイドチャネル攻撃をしかけ鍵を取り出すということをしました。これは実際のクレジットカードにも有効だということでなかなか中二心をくすぐられる講義でしたw
 2-CではRやPythonディープラーニングを使ってみるという実習と人工知能を活用していく上での問題点として学習の時点でコンタミがある場合の対策などについてグループでディスカッションしました。

3日目

 この日受けた講義は「3-D The OOM CTF」「4-D 実行ファイルの防御機構を突破せよ」「5-A サーバ運用におけるパスワード管理」盛りだくさんな専門講義の後は特別講義として伊藤忠テクノソリューションの方から普段の仕事のお話をしていただきました。
 3-DではLinuxのメモリ管理機構として備わっているOOM killerについてお話していただきました。序盤はふむふむと余裕ブッこいて聞いていたのですが、OOMの本題に入ったあたりからとても難解になりよくわかりませんでしたw(チューターの方にとっても難しかったらしい) さすがLinuxのメモリ管理の闇というだけあるなと感じました。ただ、Linuxカーネルの闇を理解したいという気持ちが湧いてきたのでよかったと思います。
 4-Dでは事前課題で解いたx86バイナリをさらにグレードアップさせた問題をひたすら解析しました。x86バイナリを読むのはだいぶ慣れてきたのですが、ASLRが有効の状態でシェルを奪取するというのは自分には少し難しかったです…。ただGOT領域のアドレスをリークさせるところまではできたので復習して解けるようにしたいと思います。
 5-Aでは業務でペネトレーションテストをされておられる講師の経験をお話しいただいた上で、パスワードの管理方法についてグループでディスカッションしました。以前からパスワードの管理は煩わしいと思っていて何か有効な解決策はないのかと気になっていたので、いろんな意見が聞くことができとても参考になりました。

4日目

 この日受けた講義は「6・7-E インフラセキュリティ・ブートキャンプ」でした。この後に特別講義でDeNAがスタートアップだった頃からインフラを担当されている方になぜセキュリティの仕事をしているのかというルーツをお話をしていただきました。
 6・7-Eでは主にAWSをterraformというツールを使いチームで構築するというものでした。私はAWSもterraformも今回初めて触ったので、AWSの環境と構築方法の理解とterraformとの関係性などについて調べるとこから始めました。その後手動でAWSと構築し、ある程度理解した後terraformを使ってVPCを構築してみるとその容易さわかりやすさに驚きました。これを機にクラウドでのインフラ構築もやっていきたい。

5日目

 最終日は午前中にグループワークの発表がありました。他のグループはとても面白い発表していてやべーってなってましたw
発表終了後は昼食食べて閉講式して集合写真撮ってという感じでした。集合写真のとき今年のセキュキャンのキーワードでもある「今日も1日がんばるぞい!」を何回言ったかわからないw そして最後になんと!!プレゼントタイム&サイン会!!!様々な技術本や雑誌、Tシャツ、グッズなどをいただきました!(圧倒的感謝!!!!!!)

f:id:n0x2ca:20160815234255j:plainf:id:n0x2ca:20160815234310j:plainf:id:n0x2ca:20160815234317j:plainf:id:n0x2ca:20160815234323j:plain

感想

 参加する前は4泊5日は長いな〜と思っていましたが、終わってみるとまだまだやりたいという思いでいっぱいでした。CTFは時間が短かったのでここからというところで終わってしまいちょっと残念でした。
 私はあまりアニメを見ないのでついていけてないところもあり、会話に入れないことがあったので今後はアニメトラックもがんばりますww そして来年はチューターとして参加したいと思います!!

さいごに

 今回セキュキャンに参加させていただくことで各技術分野のトップの方たちとお話ができたり、SNSで繋がれたり、ともに頑張る仲間できたりと技術や知識以上に得られるものが大きかったです。技術力をあげたいという人や仲間がほしいという人は絶対に参加すべきだと思います。ただセキュキャンに参加することがすべてではないですし、参加して満足するようでは意味がないのでそこをお忘れなきを。

Bluelog README 和訳

気が向いたのでBluelogという近くにあるBluetoothバイスを検知するツールのREADMEを和訳してみた。英語の勉強という面もあるので、訳が間違ってたり表現がよくないところは優しく指摘していただければとても喜びます。

原文 GitHub - MS3FGX/Bluelog: A highly configurable Linux Bluetooth scanner with optional web interface.

Bluelog

Bluelogはwebサイトでの調査やトラフィック監視用に設計され、システムのデーモンかwebフロントエンドを選択して実行させることができるLinuxBluetoothスキャナーである。それは長期間、特定の静的な場所でその範囲にあるできるだけたくさんのBluetoothバイスを発見できることも目標としている。

Bluelogは放置されるように設計されているので、ユーザーインターフェースを持っていないし、一度スタートさせると何の操作も必要はない。その特色としては完全にログファイルのフォーマットが設定可能であり、同様にsyslogへネットワークを超えた中央集積型のログの機能がある。

Bluelogは貧弱で小型であるx86MIPS、ARMプロセッサで動作するよう設計された。BluelogはKali linux(www.kali.org)やPwnie Express(www.pwnieexpress.com)が提供しているPwn Pad やPwn Plugペネトレーションテストバイスに含まれている。また公式のOpenWRTレポジトリーやArch Linux AUR コミュニティーレポジトリからも入手可能である。

Bluelog Live

Bluelog Liveは定期的に発見されたデバイスの更新を提供し、それらの該当する情報は任意のwebブラウザから見ることができる。Liveモードは主に公開情報や、悪名高い”Wall of Sheep”からインスピレーションを受け設計された。(www.wallofsheep.com)

高度なLiveモードはメインのBluelogツールから分割されたソフトウェアであある。それはシンプルな静的なHTMLページやCGIモジュールから構成されBluelogからのログファイルを読み込む。

Bluelogはwebサーバではなく、ただ単にあなたが選択したHTTPデーモン(Apachelighttpd、etc)が提供するHTMLファイルを生成する。したがって、Bluelog Liveをスタートさせてみる前にwebサーバはすでに適切に設定されているか確認がいる。Bluelogは実は起動中Liveページの状態に全く気づかない。それはまさに吐き出すデータがベストな状態であることを望んでいる。

Basic Option

-i
このオプションはBluelogにあなたがスキャンしたいBluetoothバイスを伝える。あなたはHCIデバイス名(hci2のような)かローカルアダプタのMACアドレスを使うことができる。ボーナスとして、もしあなたが存在しないデバイスを与えるなら、Bluelogは稼働しているデバイスを自動検知し戻ってくるだろう。
-o
これはログを書き込むファイルを任意のファイル名にできる。デフォルトのフォーマットは”bluelog-YYYY-MM-DD-HHMM.log”で、カレントディレクトリに作られる。 -v
このオプションを付加すると見つかったデバイスをコンソールに表示する。出力にはくどくどとデバイスクラスの情報やタイムスタンプの記録が含まれている。デフォルトではこのオプションはOFFになっている。
-q
これは重要ではない出力をOFFにする。これが意味するのは、通常ではスキャンの実行開始時間と適切なシャットダウンがされたかのメッセージしか見ることができない。
-d
このオプションはBluelogをバックグラウンドで動作するデーモンとして起動する。まだ定型文やスタートアップメッセージを見ることになるだろう、しかしその後はターミナル内でBluelogから情報は少しも見かけないだろう。
-k
Bluelogプロセスがデーモンモードで実行されているときに、-kオプションはそのプロセスを停止することができる。

Logging Option

-n
このオプションを使うと発見されたデバイスのデバイス名が表示される。デバイス名を見つけることに時間がかかりすぎ時折失敗することがある。したがってデバイス名を解決しないことにより、Bluelogは高速にそして正確にスキャンできる。デフォルトではOFFになっている。
-m
このオプションを利用可能ならMAC OUIを通して稼働しているハードウェアメーカーを特定する。ハードウェアメーカーはBluelog Liveと同様に標準のログファイルに記録されているだろう。この機能を利用するにはいくつかのプラットフォーム(OpenWRTのような)メーカーの法外に大きなデータベースをインストールする必要がある。
-c
このオプションを指定すると生のデバイスクラスをログファイルに書き込むようになる。このオプションをOFFにするには -f を使う。デフォルトではOFFになっている。
-f
このオプションはデバイスクラスを翻訳し多くの人が読みやすい形式にする。それはデバイスのクラスとコア容量を教えてくれるだろう。例えば、クラス”0x7a020c”は”Smart Phone, (Net Capture Obex Audio Phone)”として見える。このオプションをOFFにするには -c を使う。デフォルトではOFFになっている。
-t
このオプションを使うとスキャン開始時間と終了時間、また新しいデバイスが発見された時間がログファイルに記録されるようになる。デフォルトでは OFFになっている。
-x
このオプションを使うとMACアドレスをうやむやにすることができる。このオプションをONにすると、Bluelogは発見されたそれぞれのメーカー部分のMACアドレスを表示するが、デバイスを固有の情報はブロックする。デフォルトではOFFになっている。
-e
このオプションを使うとMACアドレスをCRC32形式へエンコーディングする。このオプションをONにすると、発見されたこれまでディスクに記録されていないMACアドレスはこの形式で記録される。 -a
このオプションは”amnesia mode”を可能にすると与えられた時間が経つとBluelogは一度発見した特定のデバイスを忘れてしまう。このオプションによってBluelogはデバイスと出会ったとき、初めて出会ったものとして再びログに記録し、発見された時間も更新されるだろう。

Output Options

-l
このオプションはBluelogを中継してLiveモードも変更する。コンソールやログファイルよりも自動的に更新されるwebページの結果を表示する。
-b
このオプションは結果のデータがronin’s Bluetoothプロファイリングプロジェクト(BlueProPro)へのアップロードにふさわしいログの形式に設定する。これは他の多くのログオプションを上書きし、Bluelog LiveはOFFになる。このプロジェクトのさらなる情報と、さらなるヒントはあなたのデータを提出してもらう必要がある。www.hackfromacave.com
-s
このオプションを使うとsyslogのみに出力するモードになる。このモードではBluelogは通常のログファイルには記録しない代わりにシステムログファイル(/var/log/syslog)だけに記録される。このモードはネットワークで接続されたsyslogデーモンに気づかない時に特に便利であり、複数のBluelogにより記録されたログを一箇所に集約する際にも使うことができる。

Acknowledgemets

Bluelogの開発当初はAlbert Huangによって執筆された”Bluetooth Essentials for Programmers”という本に含まれているサンプルコードをもとに製作されていました。この本はとても有益な本であり、もしあなたがBlueZプログラミングの入門書を探しているのならとても役立つだろう。それはBlueZプロジェクトのひどいドキュメントを ほとんど補完してくれるだろう。

この本に関するwebサイト:http://www.btessentials.com/

Bluelogのデバイスクラスを解析するコードはMichael John Wensleyによって執筆されGPLv2によって保障されている”Inquisition”を実装している。

“Inquisition"に関するさらなる情報を読みたいのなら彼のサイトへ:http://www.wensley.org.uk/

BluelogはSven Reifegersteによってかかれた”CRC Tester”のCRCハッシュ関数の修正バージョンを実装している。

CRCエンコーディングに関するSvenのページ:http://www.zorc.breitbandkatze.de/crc.html

.roninによる”SpoofTooph”はリテラルコードではないデバイスキャッシュの書き換えという素晴らしい発想をくれた。”SpoofTooph”と.roninの他のプロジェクトは彼のサイトからチェックすることができる:http://www.hackfromacave.com/

BluelogのUDP関数はlan Macdonaldが提出したコードをもとにされている。(ianmac51@googlemail.com)

BluelogもまたMartin Schlzeによってかかれたpidfile.cに含まれる関数にインスパイアされたコードをいくつか使用している。

Bluelog Liveのロゴに使用されているフォントはJakob Fischerによる”Electric Boots”である。彼のフォントコレクションはここでみることができる:http://www.pizzadude.dk/

BluelogのOpenWRTバージョンはGary Bonnerの仕事ぶりやJoshua HurstとDean Nielsonの陰の支えがなければ可能ではなかっただろう。Stephen Walkerもありがとう。彼女はBluelogのためにプラットフォームの貴重な情報である公式のOpenWRTパッケージを保守し続けてくれた

BluelogのためにArch Linuxの組み込みスクリプトを保守してくれてありがとう、Jonas ”onny” Heinrich。彼のプロジェクト:http://www.project-insanity.org/

BluelogようにカスマイズされたPwn Plug上での支援や助力には大変感謝します、Dave Porcello、Jonathan Cran、Punie Express team。

イタリアのボルザノでネットワークトラフィックモニタリングの構造を開発している間にBluelogへパッチを当ててくれた、Paolo ValleriやIntegreenプロジェクトありがとう。プロジェクトサイト:http://www.integreen-life.bz.it/

DEFCON Privacy VillageのテーマにBluelog Liveを組み入れてくれたTeresa Brooksありがとう。

Bluelogについてのコメントや提案をしてくださり正しい方向へと私を進めてくださったすべてのユーザに感謝します。

最後に、調整の目的で私にBluetoothバイスを寄付してくださった方々に感謝いたします。スキャンするデバイスがなしでBluetoothスキャナーをかくことはかなり難しい、そのためハードウェアは私にとって大変貴重である。

License

このプログラムはフリーソフトウェア;あなたはフリーソフトウェア団体によって公開されているGNU GPLv2のライセンスによりこれを再配布または修正して再配布ができる。
このプログラムは便利になるよう望まれて配布されている。しかしなにも保証はない。;暗にほのめかされる市場的な保証や特定の適性な目的のようなものもない。
詳細はソースディレクトリに含まれている”COPYING”ファイルを見て。

C言語の参照外しとダブルポインタ

ふと、「参照外し」の語源というか由来というかそんなものは何かあるのかな〜と思いググってたところ別のある問題に出くわした。 これってみんなパッと答えられるのかなと思い書いてみた。 そのソースコードが以下である。

gistd9a5cbadb0c86a3adb99cb94b95302a5

問題はこれの出力を答えろというもの。

char型の配列とポインタ変数が宣言してある。 そして、ポインタ変数に配列のアドレスが代入され、出力してある。 という簡単なC言語のプログラムである。 慣れてる人ならこんな問題は瞬殺なんだろうけど、自分は少し考えてしまった... ということで、整理も兼ねて解答を書いていく。

解答

まず1つ目の出力から。
char mark_1[][5] = {"zyx", "wv", "utsr", "qpo", "nmlk"};
まずこれは普通にchar型の二次元配列を宣言して初期化しているだけ。
printf("%s¥n", mark_1[1] + 1);
出力ではフォーマットパラメータに%sが指定されている。(文字列を出力) その出力の値としてmark_1[1] + 1が指定されている。
これはまずmark_1[1]で配列の要素"wv"のアドレスを指定し、そのあと"wv"要素の中の先頭から+1個進んだ先の文字列"v"が出力される。

2つ目の出力
printf("%s¥n", pt_1 + 1);
これも1つ目と同様の考え方で理解できる。ただ、今度はmark_1を直接使っているのではなくpt_1にmark_1のアドレスを代入してそれを利用している。この場合pt_1ではすでに*mark_1が代入されているので、配列mark_1の先頭要素であることが確定している。(1つ目と表記をあわせるならpt_1=*mark_1=mark_1[0])そして要素内で+1してあるので、結果出力は"yx"になる。

3つ目
ここはもう1つの配列
char *mark_2[5] = {"cba", "ed", "ihgf", "lkj", "ponm"};
を使っている。そして
pt_2 = mark_2;
で配列mark_2の先頭アドレスをpt_2に代入。
printf("%s¥n", *pt_2 + 2);
ここでは*pt_2で先頭の要素"cba"を指しており、+2で先頭から2つ進んだ先の"a"を出力している。

4つ目
printf("%c¥n", **pt_2 + 2);
ここがちょっと特殊である。といっても難しくはない。フォーマットパラメータは%cとなっている。(1文字を出力)そしてその値として**pt_2+2となっている。この考え方としては、参照外しの演算子「*」と四則演算子では参照外しの演算子が優先されるということと、値として特定の文字が確定したあとに四則演算を用いるとASCIIコードの計算とされることだ。具体的に言うと、まず**pt_2で配列mark_2の先頭要素の先頭文字"c"が確定する。この時点で+2はポインタ演算ではなくなりASCIIコードでの+2となる。そのため"c"の2つ先のアルファベット"e"が出力されることになる。間違っても配列の要素の"ed"の"e"が出力されたわけではない!

5つ目
printf("%s¥n", *(pt_2 + 2) + 2);
pt_2+2してから参照外しをしているので配列要素の"ihgf"を指しており、その後さらに+2しているので"gf"が出力される。

これで終わり。

まとめ

参照外しや[]の優先度はあまり気にしたことがなかったので以下のサイトで確認してみた。

C Operator Precedence - cppreference.com

すると、やはり優先度はa[ ] > *a となっている。そして四則演算子よりも参照外しの方が優先度が高いことがわかる。
言われてみれば当たり前な話だけど、演算子の優先度に気をつけよう。そしてなにより基本は大事!