bookmark_borderWebのセキュリティで注意したいポイントと脆弱性

この記事はseccamp2017 Advent Calendar 2017 の10日目です。記事の執筆から逃げていたら担当日が終わりそうで焦りながら書いています。

WebセキュリティではXSSやSQLi, CSRFなど比較的よく知られている脆弱性だと思います。これら以外にも様々な種類があることを最近、書籍(脆弱性診断スタートガイド)やWebで学んだので紹介してみます。

cookieのhttponly属性

cookieには属性という情報を付与することが出来ます。このうちのhttponly属性はWebページ(HTML)からcookieに対してアクセス出来るかを表しています。この属性が有効になっている場合、JavaScriptを利用してcookieへアクセスすることが出来ません。

例えば、サイトにXSSの脆弱性がありcookieでセッションを管理していた場合、httponly属性が有効でないとdocument.cookieによりセッション情報が流出する危険性があります。これはセッションハイジャックなどにも繋がる可能性もあります。

この対策は、cookieのhttponly属性を有効にすることです。ただし、Webサイトでcookieの情報を取得する場合 は有効にすると妨げになってしまうので注意が必要です。

参考: httpOnlyなCookieとは? – それマグで!

cookieのsecure属性

上記のhttponly属性と同様にcookieに付与する属性になります。これは本来、httpsでやり取りされるべきcookieがhttpでやり取りされるのを防ぐことが出来ます。なので、httpsサイトでは可能な限り付与するべきだと思います。

参考: http https 混在サイトでの Cookie Secure 属性の扱い方 – 長生村本郷Engineers’Blog

HTTPヘッダ・インジェクション

リクエストに含まれる改行コードがエスケープされずに出力されてhttpヘッダにインジェクションが可能になる脆弱性です。 例えば以下のパラメータ付きURLhttp://test.com/a.php?jump=%0d%0aLocation:%20http://yahoo.co.jp/でyahoo.co.jpにリンクされてしまった場合、httpヘッダインジェクションが起きているといえます。

そこで実際に検証してみることにしました。実際に動かしてみたソースコードは以下です。

<?php

if(isset($_GET['jump'])){
$dest=$_GET['jump'];
}else{
$dest="default";
}

header("HTTP/1.1 301 Moved Permanently");
header("Content-Type: text/html");
header("Location: http://koyama.me/?param=$dest");

exit;
?>

環境はapache + php7.0でdockerを使いました。実際にテストで送ったリクエストが以下です。

GET /test.php?jump=%0D%0ALocation:%20http://yahoo.co.jp/ HTTP/1.1
Host: localhost:8000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:57.0) Gecko/20100101 Firefox/57.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ja,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: close
Upgrade-Insecure-Requests: 1

このリクエストに対してサーバからは以下のレスポンスが帰ってきました。

HTTP/1.1 301 Moved Permanently
Date: Sun, 10 Dec 2017 14:46:04 GMT
Server: Apache/2.4.10 (Debian)
X-Powered-By: PHP/7.0.24
Content-Length: 149
Connection: close
Content-Type: text/html;charset=UTF-8

<br />
<b>Warning</b>: Header may not contain more than a single header, new line detected in <b>/var/www/html/test.php</b> on line <b>11</b><br />

正直、これは本来意図していた応答ではありません。しかし、PHPのheader関数の内部でhttpヘッダインジェクション対策が行われているからこそでもあります。徳丸先生の記事が参考になります。

PHPにおけるHTTPヘッダインジェクションはまだしぶとく生き残る | 徳丸浩の日記

本来、意図したレスポンスは以下の形式です。

HTTP/1.1 301 Moved Permanently
Date: Sun, 10 Dec 2017 14:45:43 GMT
Server: Apache/2.4.10 (Debian)
X-Powered-By: PHP/7.0.24
Location: http://koyama.me/?param=
Location: http://yahoo.co.jp/
Content-Length: 0
Connection: close
Content-Type: text/html;charset=UTF-8

このレスポンスを見るとhttpレスポンスのヘッダにLocation: が複数並んでいることが確認できます。書籍によるとApacheでは複数あるLocation:のうち最後に存在するものが優先されるとのことでした。実際に、手元の環境でも試したところ同様の挙動を確認することが出来ました。この挙動に関してもブラウザやサーバソフトウェアに依存すると思われます。もう少し詳しい検証が必要だと感じました。

時間がないので今回はこの辺で…。遅れてごめんなさいm(_ _)m

検証環境

  • Docker(php:7.0-apache)
  • Firefox 57.01(64bit)
  • BurpSuite Community Edition 1.7.29

bookmark_borderIoTSecJP Tokyoキックオフイベントに参加した

IoT Sec JPのTokyoキックオフイベントに参加した。

コミュニテイの設立の趣旨は組込系系のシステムのセキュリティというGeek分野で頼れる人が集まったコミュニティの形成とのこと。こういったコミュニティが日本では活発でないので良い取り組みだと思う。

以下はその時の簡単なメモ。

 

IoTセキュリティのいろいろ

センシングデータ

センサーデータとは:行動分析の鍵となる”キレイな”データ|データ分析用語を解説 – データビジュアライズで経営を視える化する/graffe グラーフ

オムロンが中心となって取り組んでいるらしい。

データの扱い

  • データを売り飛ばせる市場
  • ルンバの間取りデータ提供
  • Amazon Echoの音声データを証拠として提出
  • ユーザを識別できる情報を削除することでデータとして提供できる。

IoTの製造と販売

IoT向けの軽量プロトコルMQTTが狙われている。

IoTやM2M等で使用されるプロトコルMQTTによる探索行為の増加等について – 警察庁セキュリティポータルサイト@police

IoT製品はOEMやORMで販売されているケースがあり、元の製品がアップデートされてもOEM製品には適用されないことも。中にはアップデートしても脆弱性が残っているようなパターンも。

IoTシステムの脅威を考える

 

IoT製品はハードやソフト、ネットワークなど様々な要素から構成されているため、脅威はそれぞれの箇所について考える必要がある。

  • NFC
  • Bluetooth
  • ハードウェア
  • クラウド、APIサーバ

LINE WAVEの分解

中を空けてみる特殊コネクタが存在している。秋月で頼むと端子にあったコネクタを作成してくれるので解析できなくもないが、コスト(時間と手間)を考えると割に合わないらしい。

ODM

委託者のブランドで販売、製造する場合

ODMとOEMの違い

以下を読むと書いてある。OEMは委託者のブランドでの生産であるに対して、ODMは委託者のブランドで製品を設計・生産することらしい?

OEM生産とODM生産の違い | 貿易・投資相談Q&A – 国・地域別に見る – ジェトロ

基盤から侵入経路を探す

FCCIDはいろんな情報がある。連邦通信委員会が公開している。ここからCPUのプロセサ名が分かる。flashromってサイトに掲載されている。

 

ドローンの簡単な説明

マルチコプターのことを話す。水中では電波が通らないので潜水艦は長調波を使うなどしている。

  • GPSの位置情報を使う
  • CEOフェンシング情報の更新(空港の周辺は飛行禁止)
  • 地図情報の取得
  • オペレータ管理ツールへの情報通信
  • DJI FLIGHTHUBなどの複数ドローン、オペレータの管理
  • ファームウェアのアップデート(更新しないと飛ばせない)

ドローンの分類

一般向けと産業向けがある。

おもちゃの場合は回転したまま落ちることはない。一方、産業向けは回転したまま落ちてくる。とくに、羽が鋭利などで注意する必要がある。

日本の場合、2.4GHzの15Wくらいまでと法律で定められている。ドローン本体とコントローラの相互通信がWi-Fiでスマホとの通信にも相互方向のWi-Fiが使われる。

産業向けのドローンになると稼働時間が30, 45分というレベルになっている。から、それってハッキングする必要あるのか…。

2.4GHz帯は電波のゴミ箱と呼ばれる部分。

ホビー系は赤外線を使っているから遮られたら切れる。2.4GHzだとスペクトラム拡散方式がいろいろうまく使うなどにより混信を避けている。

乗っ取るにはプロトコルを揃えてスペクトラムも揃えないければならない。

プロトコルが独自で、ペアリングが必要な場合がある。同じものを喋らなければならないので厳しい。妨害電波を出すことで目隠し運転のようにすることは可能。ただし、影響範囲は限定的。

ネットで妨害したり三段重で打ったり…。結局は妨害するには物理妨害のほうが効果的であるといのが現状。

BLEな()おもちゃを調べてみる

とにかく面白かった。

BLEな()おもちゃを調べてみる // Speaker Deck

とあるセキュリティ会社の日常

とあるセキュリティ会社のIoTセキュリティチームの日常(ErrataはDescription参照)

実施にあったしくじりが面白かった。

  • AC由来のDC GNDと別DC GNDズレで高級デバッガ即死
  • 純正デバッガ挙動でデバイス文鎮化
  • 手が滑ってショートが発生してデバイス破壊
  • プロセッサのブートモード理解不足で文鎮化
  • ケーブル品質のせいで書き込みエラーであわや文鎮化
  • ヒートガンで全てを焼き払ってしまった

bookmark_borderClick Jackingを検証してみた

キャンプで頂いた「脆弱性診断スタートガイド」という書籍に載っていた「クリックジャッキング」という攻撃手法を検証してみました。

クリックジャッキングとは、正規のWebサイトの機能をユーザが意図しない形で実行させることができる手法です。例えば、会員登録型サービスにおける退会処理をゲームに見せかけたページで実行させるなどが可能です。

以下では、実際にサンプルを作成してその効果について検証してみました。

見ただけでは単なるPLAYボタンが表示されているサイトにしか見えません。しかし、opacity=0のチェックを外すとiframeが出現します。

実はこのiframeはチェックがついていたときも存在しています。しかし、チェックが入っていたときは透過させることで見えない状態になっていました。

この攻撃手法では攻撃者が用意したページに正規のサイトを透過して最前面におくことで、ユーザが意図しない形で処理を実行させることが出来ます。例えばCSRFが存在しなくてもこの形式であればCSRF対策用トークンを取得した状態で確定を行うことも可能ではないかと思いました。

ソースはGithubにあげました。よかったらスターお願いします。

tomoyk/clickJackingSample: クリックジャッキングのサンプル

Webアプリのセキュリティは奥が深いと思う日々です。

(2017/11/13 追記)

クリックジャッキングの対策としては「X-Frame-Optionsレスポンスヘッダー」を「SAMEORIGIN」か「DENY」に設定することが考えられます。

参考: Webエンジニアだったら当然知っておきたい「 クリックジャッキング対策 」とは? | ヌーラボ

bookmark_borderUbuntu 16.04にzabbix 3.4をインストール

リポジトリを追加

wget https://repo.zabbix.com/zabbix/3.4/ubuntu/pool/main/z/zabbix-release/zabbix-release_3.4-1+xenial_all.deb

sudo dpkg -i zabbix-release_3.4-1+xenial_all.deb

インストール

sudo apt-get install zabbix-server-mysql zabbix-agent zabbix-frontend-php

MySQLにログイン

mysql -u root -p

create database zabbix;
grant all privileges on zabbix.* to zabbix@’localhost’ identified by ‘hogehoge123’;
flush privileges;
exit;

日本語フォントのインストール

sudo apt-get install fonts-vlgothic

DBデータを登録

zcat /usr/share/doc/zabbix-server-mysql/create.sql.gz | mysql -uroot zabbix -p

configを変更

DBPasswordだけ

http://qiita.com/koara-local/items/26475b321030140d2048

nginxの設定をする

シンボリックリンクを貼る

ln -s /usr/share/zabbix/ /var/www/html/zabbix

ファイルphp.iniを編集

date.timezone = “Asia/Tokyo”

いろいろあってWebからアクセス

The frontend does not match Zabbix database.って表示されたらDBの初期化に失敗している証拠

http://qiita.com/dz_/items/3e85dd369c8053ceffe8

なんかエラー起きるからDB入れなおしたほうが良さそう

mysql -uroot zbx -p < create.sql
Enter password:
ERROR 1366 (HY000) at line 3390: Incorrect string value: ‘xD0xA1’ for column ‘units’ at row 1

めも

DB回りの処理

DBの削除 drop database DB名

ユーザの削除 drop user 'ユーザ名'@'localhost';

日本語の設定

bookmark_borderNexus7 2013(Wi-Fi)にAndroidのFactoryImageをMacを焼いてみる

SDK Managerを落としてくる

Google公式で配布されている中からAndroid Studioが含まれていないものを落とす。

Android Studio と SDK ツールをダウンロードする | Android Studio

wget https://dl.google.com/android/repository/sdk-tools-darwin-3859397.zip?hl=ja
mkdir work
cd $_
mv ../sdk-tools-darwin-3859397.zip .
unzip sdk-tools-darwin-3859397.zip

sdkmanagerを使ってplatoform-toolsを落とす

cd tools/bin
./sdkmanager --update
./sdkmanager --list
# platform-toolsのインストール
./sdkmanager platform-tools

Androidの開発者オプション

Andoridの設定にあるビルド番号を連打して開発者オプションを表示させる。

開発者オプションのUSBデバッグを有効化する。

FactoryImageをダウンロード

Factory Images for Nexus and Pixel Devices  |  Google APIs for Android  |  Google Developers

ここから自分のデバイスにあうファクトリーイメージをダウンロードする。

ダウンロードしたら展開する。スクリプト(bat, sh)があるので中を見てみると単にコマンドが羅列してあるだけだった。

書き込み

6.0.1 (MOB30X)

最初は6.0.1 (MOB30X)を4.4からあげようとしたが失敗した。

--------------------------------------------
Bootloader Version...: FLO-04.08
Baseband Version.....: none
Serial Number........: 0a0b3c1c
--------------------------------------------
checking product...
FAILED

Device product is 'flo'.
Update requires 'deb'.

finished. total time: 0.015s

5.1.1 (LMY48T)

次に5.1.1 (LMY48T)で試したところ成功した。

作業手順は以下。

参考: Factory Images for Nexus and Pixel Devices  |  Google APIs for Android  |  Google Developers

# bootloaderを表示
adb reboot bootloader

# 展開したスクリプトを実行する
# fastbootにパスを通さないとコマンドが無いと怒られる
./flash-all.sh
target didn't report max-download-size
sending 'bootloader' (3911 KB)...
OKAY [  0.141s]
writing 'bootloader'...
OKAY [  1.529s]
finished. total time: 1.671s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.006s
extracting android-info.txt (0 MB)...
extracting boot.img (7 MB)...
target didn't report max-download-size
archive does not contain 'boot.sig'
archive does not contain 'dtbo.img'
archive does not contain 'dt.img'
extracting recovery.img (7 MB)...
archive does not contain 'recovery.sig'
extracting system.img (803 MB)...
archive does not contain 'system.sig'
archive does not contain 'vbmeta.img'
archive does not contain 'vendor.img'
wiping userdata...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
Creating filesystem with parameters:
    Size: 28856791040
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 32768
    Label:
    Blocks: 7045115
    Block groups: 215
    Reserved block group size: 1024
Created filesystem with 11/1761280 inodes and 154578/7045115 blocks
wiping cache...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
Creating filesystem with parameters:
    Size: 587202560
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7168
    Inode size: 256
    Journal blocks: 2240
    Label:
    Blocks: 143360
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 11/35840 inodes and 4616/143360 blocks
--------------------------------------------
Bootloader Version...: FLO-04.05
Baseband Version.....: none
Serial Number........: 0a0b3c1c
--------------------------------------------
checking product...
OKAY [  0.003s]
checking version-bootloader...
OKAY [  0.004s]
sending 'boot' (7256 KB)...
OKAY [  0.260s]
writing 'boot'...
OKAY [  1.056s]
sending 'recovery' (7860 KB)...
OKAY [  0.282s]
writing 'recovery'...
OKAY [  0.299s]
erasing 'system'...
OKAY [  1.596s]
sending 'system' (823014 KB)...
OKAY [ 27.928s]
writing 'system'...
OKAY [ 76.871s]
erasing 'userdata'...
OKAY [ 57.296s]
sending 'userdata' (139085 KB)...
OKAY [  4.784s]
writing 'userdata'...
OKAY [  6.232s]
erasing 'cache'...
OKAY [  0.975s]
sending 'cache' (10984 KB)...
OKAY [  0.385s]
writing 'cache'...
OKAY [  0.503s]
rebooting...

finished. total time: 178.491s

うまく行けば4色のドットが飛び交う画面がしばらく表示されてセットアップ画面が表示される。

相性とか組み合わせがあるらし

[Update: Nexus 6] [Flash All The Things] October Lollipop Security And Android 6.0 Marshmallow Nexus OTA Roundup

このサイトによるとNexus 2013 Wi-Fi

5.1.1 LMY48M -> 6.0 MRA58K

とのことなのでこの順番で焼いてみる。

5.1.1 (LMY48M)

ダウロードして焼いたら成功した。

./flash-all.sh
target didn't report max-download-size
sending 'bootloader' (3911 KB)...
OKAY [  0.130s]
writing 'bootloader'...
OKAY [  1.375s]
finished. total time: 1.505s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.006s
extracting android-info.txt (0 MB)...
extracting boot.img (7 MB)...
target didn't report max-download-size
archive does not contain 'boot.sig'
archive does not contain 'dtbo.img'
archive does not contain 'dt.img'
extracting recovery.img (7 MB)...
archive does not contain 'recovery.sig'
extracting system.img (803 MB)...
archive does not contain 'system.sig'
archive does not contain 'vbmeta.img'
archive does not contain 'vendor.img'
wiping userdata...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
Creating filesystem with parameters:
    Size: 28856791040
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 32768
    Label:
    Blocks: 7045115
    Block groups: 215
    Reserved block group size: 1024
Created filesystem with 11/1761280 inodes and 154578/7045115 blocks
wiping cache...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
Creating filesystem with parameters:
    Size: 587202560
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7168
    Inode size: 256
    Journal blocks: 2240
    Label:
    Blocks: 143360
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 11/35840 inodes and 4616/143360 blocks
--------------------------------------------
Bootloader Version...: FLO-04.05
Baseband Version.....: none
Serial Number........: 0a0b3c1c
--------------------------------------------
checking product...
OKAY [  0.003s]
checking version-bootloader...
OKAY [  0.004s]
sending 'boot' (7256 KB)...
OKAY [  0.240s]
writing 'boot'...
OKAY [  0.370s]
sending 'recovery' (7860 KB)...
OKAY [  0.262s]
writing 'recovery'...
OKAY [  0.299s]
erasing 'system'...
OKAY [  1.385s]
sending 'system' (822754 KB)...
OKAY [ 27.781s]
writing 'system'...
OKAY [ 38.190s]
erasing 'userdata'...
OKAY [ 20.386s]
sending 'userdata' (139085 KB)...
OKAY [  4.736s]
writing 'userdata'...
OKAY [  6.128s]
erasing 'cache'...
OKAY [  0.804s]
sending 'cache' (10984 KB)...
OKAY [  0.363s]
writing 'cache'...
OKAY [  0.502s]
rebooting...

finished. total time: 101.470s

6.0 (MRA58K)

手順に従って焼いてみる

./flash-all.sh
target didn't report max-download-size
sending 'bootloader' (3911 KB)...
OKAY [  0.143s]
writing 'bootloader'...
OKAY [  1.281s]
finished. total time: 1.425s
rebooting into bootloader...
OKAY [  0.006s]
finished. total time: 0.006s
extracting android-info.txt (0 MB)...
extracting boot.img (7 MB)...
target didn't report max-download-size
archive does not contain 'boot.sig'
archive does not contain 'dtbo.img'
archive does not contain 'dt.img'
extracting recovery.img (8 MB)...
archive does not contain 'recovery.sig'
extracting system.img (819 MB)...
archive does not contain 'system.sig'
archive does not contain 'vbmeta.img'
archive does not contain 'vendor.img'
wiping userdata...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
Creating filesystem with parameters:
    Size: 28856791040
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 8192
    Inode size: 256
    Journal blocks: 32768
    Label:
    Blocks: 7045115
    Block groups: 215
    Reserved block group size: 1024
Created filesystem with 11/1761280 inodes and 154578/7045115 blocks
wiping cache...
Couldn't parse erase-block-size '0x'.
Couldn't parse logical-block-size '0x'.
Creating filesystem with parameters:
    Size: 587202560
    Block size: 4096
    Blocks per group: 32768
    Inodes per group: 7168
    Inode size: 256
    Journal blocks: 2240
    Label:
    Blocks: 143360
    Block groups: 5
    Reserved block group size: 39
Created filesystem with 11/35840 inodes and 4616/143360 blocks
--------------------------------------------
Bootloader Version...: FLO-04.05
Baseband Version.....: none
Serial Number........: 0a0b3c1c
--------------------------------------------
checking product...
OKAY [  0.003s]
checking version-bootloader...
OKAY [  0.004s]
sending 'boot' (7448 KB)...
OKAY [  0.258s]
writing 'boot'...
OKAY [  0.398s]
sending 'recovery' (8194 KB)...
OKAY [  0.290s]
writing 'recovery'...
OKAY [  0.326s]
erasing 'system'...
OKAY [  1.168s]
sending 'system' (839465 KB)...
OKAY [ 28.754s]
writing 'system'...
OKAY [ 39.854s]
erasing 'userdata'...
OKAY [ 20.038s]
sending 'userdata' (139085 KB)...
OKAY [  4.780s]
writing 'userdata'...
OKAY [  6.132s]
erasing 'cache'...
OKAY [  0.740s]
sending 'cache' (10984 KB)...
OKAY [  0.384s]
writing 'cache'...
OKAY [  0.502s]
rebooting...

finished. total time: 103.648s

上手く焼けた。

bookmark_borderLogstalgiaをソースからビルドしてみる

実行環境はUbuntu 16.04 x86-64

公式サイトからダウンロードする。

Logstalgia – a website access log visualization tool

コマンドsudo apt install PACKAGESで以下のパッケージを入れる。

  • libglm-dev
  • glm
  • libboost1.58-dev
  • libsdl2-image-dev
  • libglew-dev
  • glew-utils
  • libpcre3-dev
  • libfreetype6-dev
  • pkg-config
  • g++

これで./configureを実行すると怒られないはず..。

あとはmakeしてsudo make installすればよい。

これでインストールが完了した。

bookmark_borderMySQLのrootパスワードを初期化する

見たサイト

作業ログ

root@hoge:~# mysqld_safe --init-file=/root/init-mysql
2017-08-26T02:11:59.477574Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-08-26T02:11:59.492627Z mysqld_safe A mysqld process already exists
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2017-08-26 10:58:46 JST; 13min ago
Process: 14792 ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid (code=exited, status=0/SUCCESS)
Process: 14752 ExecStartPre=/usr/share/mysql/mysql-systemd-start pre (code=exited, status=0/SUCCESS)
Main PID: 14798 (mysqld)
CGroup: /system.slice/mysql.service
└─14798 /usr/sbin/mysqld --daemonize --pid-file=/var/run/mysqld/mysqld.pid

Aug 26 10:58:46 hoge systemd[1]: Starting MySQL Community Server...
Aug 26 10:58:46 hoge systemd[1]: Started MySQL Community Server.
root@hoge:~# systemctl stop mysql
root@hoge:~# mysqld_safe --init-file=/root/init-mysql
2017-08-26T02:12:19.986634Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-08-26T02:12:19.988214Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.
root@hoge:~# ls /var/run/mysqld
ls: cannot access '/var/run/mysqld': No such file or directory
root@hoge:~# mkdir -p /var/run/mysqld
root@hoge:~# chown mysql:mysql /var/run/mysqld/
root@hoge:~# mysqld_safe --init-file=/root/init-mysql
2017-08-26T02:13:05.628082Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-08-26T02:13:05.641893Z mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
2017-08-26T02:13:07.52017-08-26T02:13:07.5201d 2017-08-26T02:13:07.52017-08-26T02:1.pid ended

上記方法ではどうしても上手く出来ないので方法を変えてみることにした。

mysqld_safe --skip-grant-tables --skip-networking &amp;

ログイン出来たら…

mysql> use mysql;
mysql> update user set password=password("hogehoge123") where user='root';
ERROR 1054 (42S22): Unknown column 'password' in 'field list'
mysql> update user set authentication_string=password("hogehoge123") where user='root';
mysql> flush privileges;

起動させているプロセスを終了させる

ps aux | grep mysql

ユーザmysqlで起動しているプロセス探す

root@hoge:~# ps aux | grep mysql
root 16504 0.0 0.1 4508 1840 ? S 12:07 0:00 /bin/sh /usr/bin/mysqld_safe --skip-grant-tables --skip-networking
mysql 16672 0.0 19.5 1260916 198308 ? Sl 12:07 0:01 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --skip-networking --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock
root 16953 0.0 0.1 14224 1028 pts/1 S+ 12:48 0:00 grep --color=auto mysql

正常なプロセス終了の仕方が怪しかったので確認した。

http://kazmax.zpp.jp/linux_beginner/process_kill.html

オプションなしだとTERMだった。ダメ押しでオプション付けて終了させる。

kill -TERM 16672

プロセスが終了しているか確認

ps aux | grep mysql

新しく設定したパスワードで入れるか確かめる

mysql -u root -p

mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,DROP,INDEX
-> ON wp.*
-> TO wp@localhost
-> IDENTIFIED BY 'fugafuga456';
Query OK, 0 rows affected, 1 warning (0.01 sec)

bookmark_borderphp7.0をDockerでサクッと動かす

参考: Docker Hubのオフィシャルイメージを使ったLAMP環境(Apache+PHP+MySQL)構築 – Qiita

Dockerイメージを取得

DockerHubから公式イメージを取得.

docker pull php:7.0-apache

イメージが取得できているか確認.

docker images

REPOSITORY TAG IMAGE ID CREATED SIZE
php 7.0-apache c5a07b1726fc 4 days ago 390MB

Dockerを動かす

以下で動かす.

docker run -p 8000:80 -v $(pwd):/var/www/html --name php -d php:7.0-apache

オプションの解説

オプション設定値意味
-p8000:80ローカルの8000番をコンテナの80番にマッピング
-v$(pwd):/var/www/html現在いる場所$(pwd)を/var/www/htmlにマッピング. $(pwd)を任意のローカルパスに設定することも可能
–namephp識別しやすい任意の名称をつける
-dデタッチ・モードで起動する

さらに詳しいことは, Docker run リファレンス — Docker-docs-ja 17.06.Beta ドキュメントに書いてる.

動作を確認

カレントディレクトリにindex.phpを作成して、内部に<?php phpinfo();と書いてブラウザから127.0.0.1:8000へアクセスしてみる.

phpinfoが表示さればOK.

bookmark_borderLACのJSOC見学会に参加した

国内で早い段階からセキュリティに取り組んでいるLACのSOCであるJSOCの見学会に参加した。見学会に申し込んだきっかけはScanNetSecurityの記事とLAC公式のリリースだったと思う。

リニューアルされた「JSOC」運用開始前に潜入 | ScanNetSecurity[国内最大級のサイバーセキュリティ専門ポータルサイト]

ラック、今後の世界的イベントを見据え、セキュリティ対策の砦「JSOC」を7年ぶりに一新 | セキュリティ対策のラック

(メール探したら申し込んだのが7/30だったからたぶん…。)

まず、スライドで企業説明とSOCの説明を受けた。契約企業900社という国内最大規模のSOCを運用しているとのこと。これだけの規模だとかなりのデータが集まりノウハウも蓄積されるだろうと思った。調べたら公式サイトにも掲載されていた。

JSOC®(ジェイソック)とは | セキュリティ対策のラック

次に、JSOC見学へ。入り口より先は撮影/録画/録音NGの神聖なエリアという感じがあった。NGエリアの先はネット記事の 写真で見た光景が目の前にあって興奮した。真剣にモニタへ向かっている社員の方の姿がカッコよかった。

入り口(OK)にて

見学会後に行った展望フロアからの眺めが良かった。

眺めが最高

貴重な経験ができたのが良かった。これからも見学会を開催していただけるとありがたいと思った。見学会の情報は以下からどうぞ。

ラック、今後の世界的イベントを見据え、セキュリティ対策の砦「JSOC」を7年ぶりに一新 | セキュリティ対策のラック

LAC関係者の方々ありがとうございました。

bookmark_borderPyCon JP 2017 in Tokyoにスタッフ参加した

Pythonの世界的カンファレンスであるPyCon(PyCon JP 2017 in Tokyo)にスタッフとして参加した。初参加でスタッフをやったこともあり雰囲気や規模など細かいことがわからないまま当日を迎えてしまった気がする。 スタッフとして参加して、想像以上に得られるものが多くあったと感じている。

バックパネルも設置したなぁ..

応募のきっかけ

友人からPyConというイベントがあることを聞き、公式サイトでスタッフ募集をしていたことから興味を持ち、スタッフに応募してみた。未知の環境に飛び込んでみようと思う気持ちと挑戦しようというモチベーションがあったからこそ応募できたのかもしれない。

チャレンジする

スタッフとして参加することには不安と期待が入り混じっていたと思う。特に社会人の方に混ざって活動することに抵抗があるかもしれない。しかし、実際に参加してみると座長をはじめとする他のスタッフはとても気さくな方が多く楽しく参加することができた。自分の知らないことが知れたり、自分の知っていたことをより詳しく知れたり新たな知識を吸収することができた。個人的にスタッフもプログラマの方が多いと思っていたが、インフラやセキュリティ、デザインなどIT系の中でも様々な属性の方が参加していたことが意外だった。

PyConを終えて

チュートリアルからスプリントまで含めると4日間あることもあり疲れた。スプリント終わりの飲み会は、登壇者の方やPython界隈ですごい人からいろいろ話を聞けたのがとても参考になった。Pythonの歴史や最近の動向、問題など細かい話は特に面白かった。「CFP出したほうがいい!」や「ライブラリ自作してみるといい!」などアドバイスをしてもらえたのも良い刺激になった。レベルの高いエンジニアの方から話を聞けることは学生にとってかなりプラスになる。来年のPyConまでに圧倒的成長 したい。というかする。

PyCon に感謝!!

もなか美味しかった