KOSENセキュリティコンテスト2017に参加しました

はじめに

こんにちは、Knotfoundです。 先日木更津高専が主催した高専セキュリティコンテスト(https://sckosen2017.kisarazu.ac.jp/)にチームEAnbaiの一人として参加しました。

結果は35チーム中5位でした。他のチームメンバーの活躍があっての結果だと思います。

らいとあっぷ兼参加記

 とりあえず僕が解いた問題のWrite-Up(解法)を載せておきます。他の問題に関しては他の人がアップしてるWrite-Upをご覧ください。 なお、今回のフラグ形式は

SCKOSEN{flag_strings}

みたいな感じの文字列です。

寝坊気味のコンピュータ(Network問)

通信が記録されたpcapファイルが配布されるのでとりあえずダウンロードし、WireSharkで開きます。 中には5つしかパケットが記録されておらず、全てWake-on-Lanのプロトコルのパケットでした。1つ目のパケットのMACアドレスが記述されている部分を見てみるとSCKOSENと記述されている、あからさまな文字列がありました。1つのパケットにつき同じMACアドレスがいくつかあったので、それぞれのパケットからMACアドレスを順番に一つずつつなげ合わせるとフラグが出てきます。

SCKOSEN{wake_on_lan_is_alerm}

ファイル送信pcap

 通信が記録されたpcapファイルが配布されるのでとりあえずダウンロードし、WireSharkで開きます。HTTPのPOSTメソッドが2回使われており、それぞれLenna.png(画像処理界隈では有名なあの人)とlock.zipの2つが送られていることがわかりました。  この時、僕はpcapファイル中のファイルの抽出の仕方がわからずどうしようとしていたところ、チームメンバーのsioがWiresharkのエクスポート機能について教えてくれ、エクスポート-> HTTPから無事にファイルを抽出できました。とりあえずlock.zipをunzipしてみましたがパスワードがかかっているため、すぐには解答できませんでした。 Lenna.pngをstringsかけたり、pcapファイルの中に怪しい文字列がないか探したものの、特にめぼしいものがなかったため、総当たりでパスワード解析もしようか考えたりしました。ここで、チームメンバーのwassan128がpkcrackなるツールを使うといいとアドバイスしてくれたので早速pkcrackを落としてzipファイルを食わせました。一回目は平文であるLenna.pngを一緒に食わせるのを忘れてしまい、うまくいきませんでしたがちゃんと食わせて2回目をやってみたところ、無事zipの中のflag.txt(とLenna.png、多分食わせたpngファイルと同じやつ)が取り出せました。

フラグは

SCKOSEN{k_p_t_a}

です。どうやらこれは既知平文攻撃って呼ばれる手法らしいです。(初知り)

KoH2 通信を解析しろ(フラグ発見のみ)

 通信が記録されたpcapファイルが配布されるのでとりあえずダウンロードし、WireSharkで開きます。最初から大量のSYNパケットが飛んでいて、1つ1つをチェックするのは無理でした。そこでハリネズミ本を片手に、Wiresharkの対話機能を使って通信量の多いホストを絞り込んでみました。すると、KoH1,2と同じIPアドレスのホスト同士が一番通信量が多かったためそれを見ていくことにしました。とりあえず平文の通信がないか、プロトコルでソートしてみたところ、わずかにHTTPで通信していたらしく、その内容(KoH2のホストが送ったデータ)の中にフラグがありました。

フラグは

SCKOSEN{p0rtkn0cking}

だったはずです。(メモするの忘れました。) ただ、KoHはフラグを見つけて終わりではなく今回の場合だとスコアサーバに自チームのIDを書き続けなければなりません。しかしながら僕はこれ以上は手掛かりがつかめなく、他の通信を見たりホストにアクセスしてみてもダメでした。競技が終わって、解けたほかのチームのWrite-upを見てみると

  • HTTPの通信の前後のTCPでのやり取りを真似してみる(なぜサーバとの通信がうまくいったのかを調べる)

といったことをやっており、その発想は無かったと腑に落ちました。

なんか他にも解いた気がするんですが覚えてる範囲でとりあえず書きました。思い出し次第、追記します。

おわりに

 気が向いたらCTFに参加する程度のことしかやっておらず、あまり実力がないまま出場しました。CTFに結構取り組んでいる他のチームメンバーの助言がなければ解けなかった問題もあったのでとても助かりました。  この大会の運営に携わったスタッフや関係者の皆様、他のチームのみなさん、そしてEanbaiのメンバーに感謝の意をささげます。

Windowsでダイナミックポートフォワーディングする話

今回はWindowsでダイナミックポートフォワーディングをやって簡易SOCKSサーバを建てる話です。

今回はWindows向けにビルドされたOpenSSHを利用します。

1.SSHで接続するサーバーを用意します。セットアップ方法は割愛します。

 

2.OpenSSHを導入します。導入方法は次のページを参考にしました。

www.server-world.info

基本的にはこちらの記事通りにやるのですが、Windows10のビルドバージョンの関係か、PowerShellのSet-ExecutionPolicyの挙動が変わってしまい、そのままではスクリプトの実行ができませんでした。そのため、

Set-ExevutionPolicy -Scope Process -ExecutionPolicy Bypass -Force

と、現在実行しているPowerShellのみに実行ポリシーをBypassとして設定してあげてからスクリプトの実行を行いました。PowerShellを再起動させるとポリシーが元に戻っているはずです。(セキュリティ的なアレだとあんまりよくない方法かもしれないですがMSのデベロッパが管理しているレポジトリのスクリプトなので信用することにしました。)

 

3.sshコマンドでダイナミックポートフォワードを行う

2.でssh.exeにパスが通っているはずなのでどこからでもsshコマンドが実行できると思います。コマンドプロンプトを起動させたら、次のコマンドを入力します。

ssh -N -D ローカルで待ち受ける(リッスン)ポート番号 接続ユーザー名@接続先サーバーのホスト名またはIPアドレス

sshのポート番号を変えているなどしている場合はその辺適宜設定してやってください。

パスワードの認証の場合、通常のssh接続と同様パスワード入力のプロンプトが出ますので、入力してください。成功すると、何も出力しません。

 

4.Windowsのプロキシ設定を変更する

コントロールパネル > ネットワークとインターネット > インターネットオプションの接続タブからLANの設定をクリック。

プロキシサーバーの「LANにプロキシ~」にチェックを入れ、詳細設定ボタンをクリック。

「すべてのプロトコルに~」にチェックが入っていた場合は、チェックを外し、サーバーの欄の内容を消去します。その後、「Socks」の「使用するプロキシのアドレス」に「localhost」または「127.0.0.1」を入力。「ポート」には先ほど設定した「ローカルで待ち受けるポート番号」を入力し、OKボタンをクリック。

 

恐らくこれでポートフォワーディングが行われているはずです。

試しに、ブラウザなどでIPアドレスを確認するサイトに行き、そこで表示されるIPアドレスSSHで接続するサーバーのグローバルIPアドレスに変わっていることを確認してください。

 

Windowsだとダイナミックポートフォワーディングを行う手段が限られており、なかなかうまくいかなかったのですがPuTTY(ごった煮版)を使用する方法や某氏にお勧めされたOpenSSHを利用する方法だと割と簡単にSOCKSサーバーを建てられることができました。

 

ちなみに僕みたいにものぐさな人間は3.のコマンドをバッチファイルに書いてダブルクリックでできるようにしたり、ブラウザ(GoogleChrome)しか使わないよ!っていう場合はOSの設定ではなくChrome拡張機能で管理したりしてちょっと楽にやるようにしています。

Hardening 1010 Cash Flow参加記【h1010cf】

こんばんは、Knotfoundです。
Hardening 1010 CashFlow( https://wasforum.jp/2017/04/hardening-1010-cash-flow/ )にTeam 03、「術中Hack」として参加しました。
その結果、弊チームはグランプリを受賞しました。

今回はその振り返りをしてみます。(チームの全体的な流れについても触れます。)

1.参加申し込み前後
 申し込みは個人で行い、チームを組む際にで同じ学校の同級生2人と組みたいという希望を出しました。
 その後、チームメンバーが通達されましたが希望通りに2人がチームにいた上にもう一人年下の同じ学校の後輩がチームになってしまいました。
 つまり、僕のチームは社会人2人+学生(高専生)4人という学生主体と言ってもいい構成でした。
 通達された後、のちにチームリーダーになる社会人の方がさっそくSlackのTeamを作成して下さり、自己紹介やそれぞれの目標などを確認しあいました。早い段階でこれができたことで士気も上がったのではないか、と思います。

 ちなみに僕が参加した目的は2年前のリベンジです。
 このブログでも多分エントリがあると思いますが、2年前に同じく沖縄で行われたHardening 10 MarketPlaceに僕は参加しました。
 その時の僕の実力としてはLinuxの存在や最低限のコマンドを知っていたくらいのレベルで、サーバーを自分で構築して運用するなどの経験がほとんどない状態でした。
競技当日はほとんど何もわからない状態で挑んだため、ただサーバー上でtopコマンドを叩いて画面を眺めるくらいしかできませんでした。(後はメール対応の文面を考える
のを少し手伝ったのと翌日のSoftningdayで発表したくらいかな)
 この時何もできなかったのが悔しかったので今回は更にチームに貢献できるようにする、というのが僕の目標でした。

2-1.事前に何をしたか(個人的な奴)
 ・競技環境の再現に挑戦
 僕が所属している研究室にはvSphereの演習用のサーバーがあります。せっかくその環境があるのなら、とそこに去年(Value × Value)のHardening環境を見よう見まねで再現しようとしました。また、それを聞いたチームリーダーの方にさくらのクラウドにも環境を作らないか?とのオファーを頂き、vSphereでの作業を中心にしつつ両方での環境構築に挑戦しました。空いている時間を縫って試行錯誤をした結果、リバースプロキシ(Nginx)とwebサーバ2台(Apache)、
Webサーバのデータなどを格納するデータベース、踏み台用のWindowsServer、DNSサーバー(BIND)などは実際に稼働させることができました。
 Webサーバ2台に関しては実際にWordpress+Welcartも導入しました。ただし、肝心のWebコンテンツなどは持っていないためそこまでしか再現できませんでした。
 BINDは内向けの正引きゾーンファイルのみを書きました。逆引きや外向けのゾーンファイルも書きたかったのですが、まずは基本のものを1つ書こうということで
1つだけ書きました。実際に他のサーバーなどからも名前を引くことはできました。しかし、ホスト名のみの名前解決ができませんでした。(例えばweb1.hoge.com
というFQDNがあった場合、web1だけで名前解決ができないということです。)このDNSサーバーですが、当時の環境だとメールサーバとしての役割もありました。
しかし今回はそこまでの構築は時間の都合上見送りました。リバースプロキシは本来であればロードバランサとして稼働させたかったのですがそこまではできなかったです。
全Webサーバにプールさせるためのコンテンツを持っていなかったのと、僕の技術力がまだ足りていなかったのが原因です。他のサーバに関してはOSのインストールのみで
ミドルウェアのインストールなどもできていませんでした。
 結果的に完全には環境の再現ができませんでしたが、そもそもコンテンツを持っていない時点で完全な再現は無理だと割り切っていましたし、自分の実力をアップさせるのが大きな目的だったため、個人的にはかなり役に立ったと思います。
 特にBINDのゾーンファイルなどは自分で構築する機会などもなかったため、かなり勉強になったと思います。(後で書きますが、今回のWAFに関するゾーンファイルの変更もスムーズに行えました。)
 ・分からないところなどを質問した
BINDのゾーンファイルを書いたことがなかったためSlackを通じて社会人勢に添削してもらいました。
ロードバランサの仕組みがいまいちわかってなかったためその部分も確認をしたり質問したりしました。(結果的に今回は使われませんでしたが)
さらに本番でやる作業をどうするかも話し合いました。当初はsshの接続ポート変更やsshのログインに公開鍵認証などをやることも考えましたが、社会人のメンバーに、作業に見合うだけのメリットが低いのではないか、という指摘を頂きました。僕もその指摘を受けて納得し、データベースやApacheのチューニングに注力しようということになりました。
バックアップするコンテンツの絞り込みについても話し合い、例えばWebサーバーなら/var/www/以下とか、データベース(MySQL)ならmysqldumpを使うとか、あとは各ミドルウェアなどのconfファイルとかをバックアップしよう、ということになりました。

2-2.事前に何をしたか(チーム全体的な奴)
・当日の流れを決めた
 当日の大まかな流れを決めました。具体的には、

踏み台端末へのログイン→各サーバー、端末の全アカウントのパスワード変更→
コンテンツのバックアップ→後はインシデント対応、時間があれば各種ミドルウェアのチューニング(個人的にはここで踏み台端末のWindowsやWindowsServerにパッチを当てる予定でした)
みたいな感じです。ちょっと細かいところが違うかもしれません。

・MarketPlaceの戦略を立てた
 初手で初期資産のほぼ全てを広告に割り当てる方向になりました。(売り上げで回収できるだろうという予想です)
 また、MarketPlaceは買えるだけ買ってしまえ!という方針で、結構ガンガン買うことになりました。僕も前回の反省から、MarketPlaceは積極的に利用するという考えに賛成でした。

MarketPlaceの商品一覧や特徴、またそれ以外にSlackにそのまま貼ると流れて困ってしまう情報などはチームリーダーが作ってくれたGoogleスプレッドシートにまとめてくれました。これのおかげで適宜見直すことができました。

3.前日に何をしたか
・踏み台端末などで使用するWindows用ツールのダウンロード(ポータブル版のWebブラウザ、TeratermThunderbird、NMap、7-ZipWireSharkなど)
・運営から届いた資料の読み込み、それに伴う戦略の変更
想像していたのとは異なり、MarketPlaceの購入が競技開始から2時間後からしかできないため、その間はひたすら広告を打つことになりました。今回は借金制度もありましたがそれもMarketPlace同様に開始から2時間後からしか利用できないため、見送りました。

4.当日
競技開始
集合時間を勘違いしてしまい、会場入りが遅れてしまいました・・・申し訳なかったです。(競技開始自体には間に合いました。)

・自分が使った踏み台端末(Windows)が落ちる
踏み台端末にはRDP経由で接続しました。必要なツール群を転送するためにファイル転送をしましたがしばらくするとRDPのセッションが切れてしまいました。
再接続を試みてもつながらなかったため、仕方なく管理用の画面から再起動を行いました。ファイル転送が負担になってRDPごと端末が落ちるのかなぁと思っていましたが、
それ以外の普通の作業を行っていてもだいたい10分ほどで落ちてしまい、仕方なく空いている踏み台端末に切り替えました。そこではセッションが切れるようなことはなく、作業が継続できました。ちなみに別のチームメンバーがこの端末を利用しても同じように定期的に落ちていましたが、原因はわからなかったです。

・ADのオペレーションで手間取った
 踏み台端末(Ubuntu)を利用予定のチームメンバーがなぜかsshでログインできなかったため踏み台端末(Windows)の
ActiveDirectoryのアカウントを増やそうとしたら手間取ってしまいました。今思えばわざわざActiveDirecotyを使わずに、ローカルアカウントでもよかったんじゃないかなー
って思います。
この他にもWindowsServerでMBSAのオフラインスキャンをかけましたが、会場の回線だとパッチを全てダウンロードするのにはめちゃくちゃ時間がかかることが発覚、取捨選択しようにもどれを優先したらいいのかすぐには判断できなかったため、パッチの適用を断念しました。

 その間に他のチームメンバーは踏み台端末のローカルアカウントやDB、Wordpressなどのパスワード変更、踏み台端末のWindowsのポート封鎖など、あらかじめ決めていた
  通りに着々と作業を行っていて、内心では少し焦っていました。さらに本来僕がやる予定だったDBやApacheのチューニングに関しては、他のチームメンバーが進めてくれており、僕はその設定内容をまだチューニングしていないWebサーバーにコピペするなどの作業を行っていました。
 また、本来初手でやるべきだったコンテンツのバックアップもWebページの改ざんがあったことに気づいてから行いました。幸いまだ改ざんが行われていなかったため、
そこから優先してバックアップを行いました。バックアップは念のため、踏み台端末とファイルサーバにも置きました。

 そうこうしている間に14時20分ごろに弊チームで個人情報の流出があったことが発覚、原因究明や被害規模が明確に洗い出せないまま記者会見が行う運びに。
記者会見はチームリーダーと僕と僕と同期のチームメンバーの2人で行い、その間僕は被害状況の確認のためにデータベースやWebページのログのチェックを手伝いました。
Apacheのログなどから、PHPバックドアがあったことやHTTPのリクエストの制限が行われていないことがわかり、担当のチームメンバーによって修正が行われました。

 それからしばらくしてMarketPlaceで購入したWAFの(運営側の)設定が終わったとの連絡があり、指示通りにBINDのゾーンファイルを書き換えてWebページへのアクセスをWAFを経由して行うように設定しました。後日WAFを提供して頂いた運営様からのWAFの検知ログによると約100件ほどの不正なアクセスがブロックされていました。これは僕の主観ですがWAFの設定をしたあと、Webページの改ざんや個別でのWebページのダウンなどがかなり減ったと思います。

 このタイミングになると、ほぼ安定してECサイトが稼働するようになってきました。ただ、会場4か所に設置されていた各チームの稼働状況やSLA、総資産情報などを示す
情報画面を監視しているとたまに自チームのWebサーバーが全部ダウンしているときがありました。各Webサーバー自体は稼働していたため、DNSサーバー(BIND)のダウンが原因だろうということになり、その都度BINDを再起動するようにしました。その頃はチーム内に少し余裕もあったため、社会人のチームメンバーの方がBINDの稼働状況を確認し、落ちていたら再起動をかけるシェルスクリプトを書いてくれました。
それによって(理論上は)ダウンタイムが最長でも59秒という素晴らしい稼働率になりました。

 情報画面とにらめっこしながら競技は終盤を迎え、10時間にもわたる楽しいHardeningDayは終わりを迎えました。
 作業ログをあさったり記憶からたどったりしましたが多分当日はこんな感じだったと思います。他にもたくさんあったと思いますが僕のHardeningDayはだいたいこんな感じです。

5.自分の中での良かったこと・反省点
良かったこと
・事前に演習環境を再現するために構築しようとしたこと
 他のチームのメンバーにどれほど貢献したかはわかりませんが、僕個人としてはいい修行になったと思います。少なくともロードバランサやDNSサーバを自分で建てるという機会が今までなかったため、今回それにトライし、完全ではないものの稼働させることができたというのはその過程を含めて多くの知見が得られました。
・わからないところは聞いたこと
 ロードバランサなどは多少知っていたもののちゃんとした仕組みをまだ理解していなかったため、質問して少しでも理解しようとしました。今でもまだ完全には理解していませんが、それはこれから追々理解をしていこうと思っています。
・ツールなどを事前に用意したこと
 これは競技時間内で少しでも本質的ではないことに時間は割きたくないなという考えでやっておきました。使わないツールなどもいくつかありましたが、少しでも作業に集中しやすくなったかなと思います。
・PCを2台持ってきたこと
 これは社会人のお二方の話で、実行しました。僕も私物で2台ノートPCがあったので、1台は競技環境との接続、もう1台はSlackや調べもの、資料閲覧というように作業内容を分けるようにしました。その結果、1台の画面であっちこっちに行くよりも作業効率が上がったと思います。これからコンテストや大会などに参加するときはPCは2台持っていこうと思います。
反省点
・Webサーバ、DBのチューニングをほぼ人任せにしてしまったこと
 これは事前のリサーチ不足もそうですが、当日で他のオペレーションに手間取ってしまったために人任せになってしまいました。チューニングに関しては実際に設定してみて効果などを測ってみないと見えてこないため、前もってやって慣れておかないと本番にどういう作業をしたらいいかわからなかったです。
・パスワード変更に漏れがあったこと
 これも言い訳になるようですが、外部DNSレンタルサーバーなどのことをすっかり忘れてしまっていました。
・コンテンツのバックアップが遅れたこと
 運よく全部のWebサーバーが改ざんされていたわけではなかったため、被害を免れたサーバーから急いでバックアップを行いました。やはりバックアップは大事です。
MBSAのスキャン結果を活かせなかったこと
 競技前までは、当日スキャンしてパッチを適用すれば大丈夫だろうと考えていましたが、会場の回線事情やスキャンが端末に与える負荷の考慮など事前の読みが甘かったです。今後の課題でもあります。
6.知見
・標準で提供されているリモート管理ツールの罠
 競技中、BINDがよく落とされていましたが、SoftningDayやkuromame6の中の人の情報( https://www.lac.co.jp/lacwatch/people/20170629_001322.html )によれば、今回の攻撃では脆弱性を利用したものだけではなく、リモート管理ツール(RNDC)で停止されたものもあるとのことでした。特に、リモート管理ツールでサービスを落とされた場合だと、通常のセキュリティ対策のソリューションなどでは検知できないこともあるようで、今後はRNDCに限らずリモートで制御できるツールについても注意をしなければならないことがわかりました。

シェルスクリプトは書けるようになると非常に役に立つ
 今回はBINDの自動再起動を行うために、社会人のチームメンバーの方に書いてもらいましたが、やはりシェルスクリプトが書けるというのは通常の業務にも役に立つはず
なので身に着けておかなければならない技術の一つなんだと再認識しました。

・パッチを当てる場合、必要最低限のものに絞る
 散々言ったMBSAのことですね。

・設定を変更する場合に必ずバックアップをとる、変更適用前には誰かに見てもらう
 これはチーム全体でも意識していたことで、とりあえず既存の設定ファイルを別名でコピーして置いたうえで編集し、変更箇所もコメント文で分かるようにしました。
さらに変更適用を行う前には隣の人に確認してもらい、ミスを少しでも減らすようにしました。Apacheなどはrestartではなくreloadにとどめることで変更による影響を減らすようにもしました。

・専任でメール対応を行う人を付ける
 今回はチームリーダーの方にメール対応全般をお願いしました。技術的なことはほとんど関与しない一方で迅速かつ適切なメール対応をしていただきました。おそらくそれがSLAや信頼度の向上などにもつながったのではないのかなーとチームの人たちと話し合って気づきました。

 本当はSoftningDayの次の日にはこの記事を仕上げたかったのですがズルズルと伸びてしまい、さらに見づらい文章になってしまったかもしれません。ですがとりあえず記憶がまだ確かなうちにありったけのことを書いておくことで後から見返して思い出せるような記事にしました。
 今回はグランプリを受賞し、個人的な目標も達成することができました。この結果に慢心せず精進してさらに技術力を高めていきたいです。
 最後に、このような楽しく濃密で素敵な10時間を作り上げるために奔走していただいた運営の皆様、そしてグランプリを取れた一番の理由であるチームメンバーの皆さんと、同じく今回参加した皆様に、遅ればせながら感謝と慰労の意を申し上げます。今回は本当にありがとうございました!

#h1010cf

Windows10導入に関してのちょっとしたメモなど

 こんばんは、Knotfoundです。ご無沙汰してます。

 今回は弊学の学生が推奨機をWindows10にしたいと思ったときに参考になればいいような記事を書きたいと思います。(もしかしたら追記があるかもしれません。その場合は記事の下のほうに追記します。)

 最近私の周りでWindows10に興味を持つ、あるいは自分のパソコンでWindows10を使いたいという人がちらほらと増えてきました。しかし仮想環境やサブのパソコンがある人ならともかく推奨機1台しかなくて簡単にはOSを変えられないといった人が大多数だと思います。(一部のておくれた人は除く)
そこで今回は私が自分のマシンでWindows10を入れたときにやったときのこととかをまとめてみます。

Ⅰ.Windows10導入には2つの手段がある
 2016年6月21日今日現在ではWindows7以上のWindows OSが入ったマシンに無償でWindows10を導入する手段は2つあります。

 1.Windows Updateによる「Windows 10を入手する」更新プログラム(GWX)をインストールし、Windows10へのアップグレード案内に従ってアップグレードを行う。※
 2.Microsoft公式サイトからメディア作成ツールをダウンロードし、Windows10のISOイメージを取得してDVDディスクやUSBメモリなどに展開した後、そのメディアを使用してWindows10のクリーンインストールを行う。

 1はインターネットなどで散々話題になりご存じのポップアップ通知の出るアレです。これの是非については今回は触れませんがこの手段は多くの環境においてはパソコンがWindows10の要求する仕様さえ満たしていれば勝手にやってくれます。
 ※ただし今回のテーマにある推奨機でOSがEnterpriseエディションの場合、この更新プログラムは適用されず、あのポップアップ通知も出ることはありません。従ってEnterpriseを使用している皆さんがこの手段を使う場合、一度推奨機に入っていたリカバリイメージからOSをProfessionalエディションにリカバリーし、提供されているWindowsUpdateを全て適用したのちGWX更新プログラム経由で行う必要があります。(正直めんどくさいです。)また、リカバリイメージからリカバリーしたWindows7はおそらくWindowsUpdateClientが古いバージョンなので、Microsoftから直接WindowsUpdateを行う場合非常に時間がかかります。(回線速度やマシンに搭載されてるメモリの量にもよります。)

 2は大半の人にとっては敷居が高いと思われる手段と思われます。この手段を使う場合、予め自分のマシンに適合する各種ドライバーをダウンロードして用意をする必要があるほか、Windowsのプロダクトキー(PCの底面に貼ってあるアレ)を入力したり自分でディスクストレージのパーティションを切ったりする(といってもたいていの場合はCドライブ1つで済むでしょうが)などOSのインストール作業に関するある程度の知識が求められます。
 また、ストレージとOSの相性が悪い場合、以前の僕のように訳のわからないトラブルに巻き込まれて苦しむ可能性も存在します。

 Ⅱ.既存の環境を引き継ぎたいならアップグレードインストールを、全部まっさらにして一からやり直したい人は新規クリーンインストールを ※ただし、Enterpriseユーザーはどのみち今の環境が飛びます。
 Ⅰでも触れましたが通常の場合と違い、Enterpriseユーザーは一度今の環境を消さないとWindows10の導入が不可能です。また、アップグレードにしろ新規にしろバックアップはとらないと仮に失敗したときに非常に大きい絶望感に包まれることでしょう。なお、自分で導入できる自信がない人はそこら辺にいる高専生や先輩、情報処理センターなどに自己責任のもと助けてもらうと吉です。

 Ⅲ.推奨機ユーザーの人は代替機を使う場合要注意
 Windows10から無償アップグレードができるようになりました。この、Windows7以上のOSのライセンスを用いてWindows10を導入した場合には新しいライセンス方式であるデジタル権利付与によってライセンス認証されます。この方式には「一度無償期間内にアップグレードさえしてしまえば、何か理由があって再びWindows7に戻してたとしても何度でもWindows10にアップグレードすることができる」というメリットと、「マシン構成(マザーボードなど)に変更があると、ライセンス認証が行われなくなる」というデメリットがあります。マシン構成にどの程度変更があるとライセンス認証が行われなくなるかは環境によって異なっているようで一概には言えません。しかし、自分のマシンにトラブルがあって代替機を使用せざるを得ない場合Windows10を導入した状態ではライセンス認証されなくなる可能性があるはずです。従って、Windows10を導入したいと考えている人はこのことも考慮しなければなりません。

 Ⅳ.終わりに
  かなり大雑把になってしまいましたが以上がまとめです。私は1年近くWindows10を使ってきましたが、結構良いOSであると感じます。InsiderPreviewなどの取り組みもあり、徐々にですがその完成度も高まっています。もし、Windows10を使ってみたいけどどういうことを考えないといけないのかわからない人がいればこの記事を参考にしていただけると幸いです。質問、誤情報などがあればどうぞ。
 

Windows10+(Crucial) SSDな環境でディスクの使用率が100%になってハマった話

皆さんこんばんは、Knotfoundです。
今回は前回の続きではなく最近知ったことを書きたいと思います。

以前書いたかもしれませんが、メインのノートパソコンのストレージをSSDに換装していて5年前のマシンでも気持ちよく使っています。
それでWindows10を使っていたのですがふとWindows7に戻してしばらく使いそれからまたWindows10にアップグレードしました。
10を起動してしばらく使っているとChromeが新しくページを読み込まない、終了もできない、タスクマネージャーも起動しない、電源を切ろうにもスタートメニューが反応しないなど、
普通のフリーズではなくだんだん死んでいく症状が発生しました。
しかたなく電源ボタン長押しで強制終了したあと今度はタスクマネージャーを起動させて監視してみることに。
すると、起動させてしばらくするとディスクの使用率が100%になりました。このとき、ディスクの読み込み/書き込みはほとんど0です。また、パソコンのインジケータもストレージのランプが
全く点灯しないことを確認しました。(今思えばこれが伏線)

アップグレードではなくクリーンインストールをして様子を見たりドライバーを変えたりしても症状は改善せず・・・

前にSandyBridge世代のマシンはIntelや各種メーカーがWindows10をサポートしないとの情報があったのでそれが原因なのだろうか・・・と思い半ばあきらめて7を使っていました。

しかし昨日ふとしたことから再びWindows10にアップグレードし、この謎に挑戦しました。
タスクマネージャーを起動させ、症状が再発することを確認してから少し考えました。
「7を使っている間は無事に使えて10にするとだめならSSDファームウェアが悪いんじゃないのかなー」
Crucialのホームページへ行きCrucial Storage Executiveを落としてインストールしたあと起動。Javaのアプリが起動してブラウザから操作してファームウェアを更新しました。
(ファームウェア単体のイメージもあったけどそれはCDに焼かないと使えないみたい?)

そして再起動すると無事・・・・・・

再発!!!!

ファームウェア更新してもだめという事実に絶望しつつ「MX200(SSDの型番) Windows10」で情報を探してみると海外のフォーラムで同じ症状に遭ってる方を発見。読み進めてみると
LPMという単語を見つけそれを検索ワードに加え、さらに調べてみると原因がやっとわかりました。


現在主流のSATA規格に準拠しているHDDやSSDにはLPMと呼ばれる省電力機能があります。そのLPMの制御方法には2つあり、HIPM,DIPMと呼ばれるものです。
HIPMはOSなどから制御する方法で、DIPMはHDDやSSDなどから直接制御する方法らしいです。
詳しくはこちらの記事にあります。(http://marosama.blogspot.jp/2010/01/sata-lpm.html)

僕のSSDにもその機能はありましたが、HIPMはサポートされていませんでした。
今回の原因はこのHIPMにSSDが対応していないにも関わらずOS側からそれを制御しようとし、不具合が発生してSSDへの給電が止まり
ディスクへアクセスが必要なプログラムから順番に死んでいった・・・と思われます。


このLPM回りの問題への対処方法はいくつかあるようですが僕が使っているマシンは次の2つが使えるようです。

1.レジストリにキーを加え、電源オプションの項目からHIPMをカットし常に給電させる、またはDIPMを有効にする。
2.BIOSSATAの項目でRAID OnモードからAHCIモードに変える*

*これは既にOSがインストールされている場合だとモードを変えることによってSSDにアクセスできなくなる場合があります。やるとしたらOSのインストール前ですね。
なので1の方法を行いました。

こちらの記事(http://karat5i.blogspot.jp/2014/09/ssd.html)にあるテキストデータを適当なエディタにはっつけて.regファイルとして保存。

 

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Power\PowerSettings\0012ee47-9041-4b5d-9b77-535fba8b1442\0b2d69d7-a2a1-449c-9680-f91c70521c60]
"Attributes"=dword:00000000

 

↑がテキストデータです。

その後実行してレジストリに追加して再起動。(もしかしたらしなくてもすぐ反映されるかもしれない。)
次にコントロールパネルから電源オプションから今アクティブになってるプランを編集。(プランの設定を変更)

f:id:masakinishime:20160312210355p:plain

画像の「AHCI Link Power Management - HIPM/DIPM」のバッテリ駆動、電源に接続をそれぞれDIPMまたはActiveに設定しOKで保存。
(ノートパソコンの場合、Activeだとバッテリーの消費が早いのでDIPMに)
念のため再起動すると・・・

無事改善!!!!!

感動ですね。そういえば一時期入れていたWindows10がしばらく使えていて途中から不具合をおこすようになったのはインストール前にBIOSの設定をたまたまAHCIモードに変えていたのを
RAID Onモードに変えていたからでしょうね。それと最初に買ったSSDに8.1をクリーンインストールした時にも同じ症状が起きたのですがおそらく同じ原因だと思われます。
何はともあれこれで快適なWindows10ライフが送れます。

そして最後に。

新しいパソコンを買ったほうが楽。それとWindows10はいいぞ。

 

P.S.

せっかくなのでCrucial Storage Executiveの中にある一時キャッシュなるものを有効にしてみました。(RAMをキャッシュにすることで大幅に高速化 + SSDの延命にもつながるようです。)

その上でベンチをとると・・・

f:id:masakinishime:20160312210624p:plain

ヒャアアアアッホウウウウウ最高だぜえええ!!!!!

VPSの爆破と再構築をやった話

こんばんは、Knotfoundです。

 

今日は冬休み前からやりたかったVPSの爆破と再構築をやったので、備忘録として記事を書きます。

 

1.爆破
もともと大したことに使ってたわけでもなかったのであんまりためらいなく爆破しました。お馴染みのあのコマンド
sudo rm -rf /* --no-preserve-root
ただ完了まで時間がかかったので途中で止めました。
※とはいえ、主要なコマンドはほとんど使用できなく、lsもcdもrmもダメでした。良い子のみんなは気をつけて使おうね!!
最後はVPSのコントロールパネルよりOSの再インストールを敢行して無事完了です。

 

2.初期設定

再インストール直後でまだまっさらな状態です。今回はCentOS6.7, 64bit版です。

まずyum関連の設定から
/etc/yum.conf に以下を追記。
--------------------
exclude=kernel*
--------------------

これはyumで更新を行う際に、kernelのアップデートを回避するためのものです。普通にノートパソコンとかにLinux入れて使うときはこのオプションは入れないんですが、以前VPSカーネルのアップデートをやって再起動した際に、uuidが変わってしまってカーネルパニックが起きてしまってめんどくさいことになってしまったので入れました。。。 カーネルによほどの脆弱性とかがない限りはそのままで行こうかと。

で、セーブした後に

yum check-update
yum update -y

でアップデートします。170MB近く更新があったのでしばらく待ってから再起動。
再起動したらsshでログインするときに使うユーザーを追加しました。

useradd knotfound

passwd knotfound

これで初期設定は終わりです。

 

3.SSHの設定など

さすがにずっとVPSのコントロールパネルで作業するのはつらいものがあるのでSSHでつなぐための設定です。

一旦rootになってから

su -

sshdの設定をします。

# cd /etc/ssh/
# cp sshd_config sshd_config.bak
# vim sshd_config

/etc/ssh/sshd_config
------------------------------------
PermitRootLogin no #ssh経由でログインする際にrootでログインすることを拒否
Port [hogehoge] #デフォルトのポート(22番)から変更
RSAAuthentication yes #RSA認証の許可
PubkeyAuthentication yes #公開鍵認証の許可
AuthorizedKeysFile .ssh/authorized_keys #公開鍵ファイルのパス
PasswordAuthentication no #パスワード認証を拒否
------------------------------------
とりあえずこれでセーブ。

次にsshでログインしたい端末で公開鍵と秘密鍵を生成します。WindowsですでにTera Termなどを使ってる人も同じように行けるはずです。

ターミナル(コマンドプロンプト)を開いて

ssh-keygen -t rsa

鍵の保存場所を聞かれるので任意の場所に。

生成して保存が終わったら公開鍵をVPSに送ります。デフォルトだとid_rsa.pubという名前だと思います。(公開鍵と秘密鍵を間違えないように注意!)
今回はSFTPで送ってあげました。

sftp USER@HOSTADDRESS

でログインしたあと対話モードになります。ログインした状態だとログイン先ユーザーのホームディレクトリ(/home/USER)にいるはずです。
ファイル送信するには

sftp > put id_rsa.pub

です。おわったら exit を入力して抜けます。
サーバー側で送ってあげた公開鍵を登録します。
公開鍵のあるディレクトリに移動して

mv id_rsa.pub ~/.ssh/
cd ~/.ssh/
id_rsa.pub >> authorized_keys

これで登録が完了するはずです。
念のため cat authorized_keysなどで中身が公開鍵の中身と同じであることを確認してください。
確認したら

rm id_rsa.pub

で消してあげます。

いよいよデーモンを再起動、の前に関係するファイルやディレクトリなどのパーミッション(権限)を確認しておきます。僕はこのパーミッションの設定が不十分で何度かログインできないことがありました。

chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

設定を反映させるためにデーモンを再起動します。

# service sshd restart

実際にIDとパスワードだけでログインを試みて、失敗し、公開鍵を用いてログインできるなら成功です。
ちなみに、sshコマンドを使ってログインするときに

ssh -p PORT -i ~/.ssh/id_rsa USER@SERVERADDRESS

のように毎回手打ちしてもいいんですが面倒なので、sshのconfigファイルにログイン先の情報を書いておくのをおすすめします。
ログインしたい端末の方で

vim ~/.ssh/config

----------------------------
Host [サーバーのアドレス]
HostName [サーバーのアドレス名]
Port [設定したポート番号]
User [ログインするユーザー名]
IdentityFile [秘密鍵をおいてあるディレクトリのパス(デフォルトだと~/.ssh/id_rsa)]
----------------------------
を書いてあげて保存します。ちゃんとかけていれば次回からは

ssh サーバーのアドレス

だけでログインが可能です!

今回はここまでで終わります。次回はiptablesの設定などを書こうと思います。それでは。

今年の総括とか

こんにちは、Knotfoundです。

そろそろ年末ということで、今回は今年の反省をしてみたいと思います。

 

1月・・・TechKids CAMPのお手伝いに参加させていただきました。こういうことは初めてだったので子どもたちへの接し方などがわからず戸惑っていましたが、すでに経験があるメンターの方などのサポートもあり、無事に終えることができました。

 

2月・・・学年末ですね 確かこの頃に寮生会ネットワーク委員長に引き継いだのかな・・・

 

3月・・・特に成果が得られなかったかな・・・ 毎度のことですが

 

4月・・・4年生に無事進級しました。

 

5月・・・プロ(@Greeeen__apple)から勧められてHardening 10 MarketPlaceのEarly birdsの方に申し込みました。詳細は以前の記事で。
(http://knot-found.hatenadiary.jp/entry/2015/06/23/235203)

 

6月・・・無事にHardeningの参加が決まり、チームの方に助けられながら2日目の発表まで終えることができました。自分はチームにほとんど貢献できませんでしたがとても良い経験になったんじゃないかと思います。

 

7月・・・学校の制度の兼ね合いでインターンシップに参加する企業を考えてました。自分はネットワークインフラ系の企業に興味があったのとせっかくの機会だから内地の企業に行ってみたいというのと(若干アレな話にはなりますが交通費その他を支給していただけるのも大事なポイントです・・・ 離島民には本当にありがたいです・・・感謝!!)で某社にエントリーシートを送り、Skype面接が済んだ後無事参加が決定しました。また、この頃に秋季応用情報技術者試験の申し込みをしました。

 

8月・・・インターンの事前課題がなかなか進まない中、前期が終わり、しばらくしてインターンの時期になりました。詳細はあえて省きますが、憧れていた御社は予想以上に素晴らしく、まさに最高のインターンシップを経験しました。(余談ですが頂いたストラップやTシャツは今でも普通に使用しています。)

 

9月・・・今回の夏休みは珍しくバイトがあまり入らなかったため応用情報の勉強に充てようと思っていたのですが、諸般の事情で勉強ができず参考書を読むことしかできませんでした。この頃から焦りは感じていたもののやはり参考書を読むことしかできず、早く寮に帰ったら勉強をしなければならないと決めました。

 

10月・・・高専祭のシーズンが近づく中、準備や映像作品の編集をしつつ応用情報の勉強をしていました。しかし、思うように勉強に身が入らずますます焦りは募ります。先輩(@kagamiz)に午後問題でわからないところを聞いたりして少しでも不安をなくそうとしました。そして審判の18日がやってきます。試験終わっての感想は「午後問は頭真っ白になったけど結果的にわかるところは埋めたしなんだかんだで楽しめたんじゃないか」っていう解放感が入り混じったものでした。(余談ですが試験勉強している間、トップをねらえ!っていうアニメに結構勇気をもらいました。)

 

11月・・・諸般の事情で稼働停止していた寮のサーバーを復活させようと以前から担当の先生とやり取りしていたのですが、先生が多忙でなかなか進捗が出ず、プロの催促に心苦しい返事しかできませんでした。また、ネットワーク委員会としての活動も停滞しており、委員長として自分が情けなく感じていました。
(そもそも先代がどう動いていたかなどの資料などがなく、どう動いたらいいのかわからなかったのもありました。責めているわけではありません。)

 

12月・・・とある講座にお手伝いとして参加しました。1月の頃のやつとは違って中学生が対象だったのですが、自分が中学生だった時よりも好奇心が強く羨ましく感じました。また、先日18日(そうです、あの審判の日からちょうど二ヶ月後です。)に応用情報の合否発表がありました。なかなかつながらないサイトに苛つきながらもアクセスしてみるとそこには合格の文字がありました。 正直落ちてもおかしくなかったので本当に嬉しかったです。

そして今に至ります。こんな感じで後期が結構密度が濃かった気がします。ですがインターンシップやHardeningなどで自分は相変わらず技術力が低いのを痛感させられており、今も課題となっています。資格だけではなくちゃんとした実力も身につけるためにCTFやAOJにもう一度挑戦しようと思います。

 

今後の課題:
・卒研のテーマについて考える。
・CTFやAOJに取り組む。
・参考書を読む癖を身につける。

などなどです。今回はこれで終わります。皆さん良いお年を!