Armoris日記 diffコマンド編

皆さんは、ファイルの古いバージョンと新しいバージョンの変更箇所について、確認したいと思ったことはありませんか?
特に、ソースコードのどの部分が変更されているのかわかると作業が捗りますよね。

今回はそんなときに覚えておくと便利なコマンドを紹介します。

ファイルの差分を確認したい...

実はファイルの差分を確認する方法はいくつかあり、例えばVS Codeや、専用ツールなどがあります。
f:id:Armoris:20200709103029p:plain:w200
しかしLinuxなどのCUI環境や、検証環境などで手軽に差分を取得したい場合があります。
そこで、今回はdiffコマンドを使用して簡単にファイル差分を取得する方法を紹介します。

今回各種オプションに関しての詳しい説明はしません。

diffコマンドを使う

以下二つのファイルについて差分を表示する

  • ファイル1
password
p
pass

hoge
  • ファイル2
password
AA
pass

huga

  • 基本の使い方
$ diff ABC.text DEF.text
2c2
< p
---
> AA
5c5
< hoge
---
> huga
  • これだけでは結果が見にくいのでオプションをつけて実行する
$ diff -u ABC.text DEF.text
--- ABC.text    2020-07-09 13:21:22.000000000 +0900
+++ DEF.text    2020-07-09 13:21:42.000000000 +0900
@@ -1,5 +1,5 @@
 password
-p
+AA
 pass

-hoge
+huga

このオプションをつけることで、結果がGitHubの差分表示に近くなるためわかりやすいと感じる人も多いと思います。


  • ファイルの差分を左右に並べて比較したい場合のオプション
$ diff -y ABC.text DEF.text
password                                                        password
p                                                             | AA
pass                                                            pass

hoge                                                          | huga
  • これに-Wオプションを追加することで横幅の指定も可能になります。
$ diff -y -W 30 ABC.text DEF.text
password        password
p             | AA
pass            pass

hoge          | huga

こうするとぱっと見てどのあたりが変更されたかがわかりやすくなると思います。


最後にプロジェクトファイルなどディレクトリを比較して差分を取りたい場合は-rオプションが使用できます。

$ diff -r ABC/ DEF/
diff -r ABC/ABC.txt DEF/ABC.txt
2c2
< p
---
> AA
5c5
< hoge
---
> huga
diff -r ABC/hoge/hoge.txt DEF/hoge/hoge.txt
2d1
<
3a3
>
diff -r ABC/test.txt DEF/test.txt
3,4d2
< test test
<
5a4,5
>
> test test

再帰的にサブディレクトリも比較してくれる。


今回は私が普段よく使うオプションに絞って紹介しましたが、他にも便利なオプションが多くあります。
また、manコマンドを使用して$ man diffとすることで詳しい使い方を見ることができます。
f:id:Armoris:20200709103038p:plain:w200
また、一見難しく感じてしまうかもしれませんが、コマンドは実際に使うことで慣れていきます。是非一度他のオプションも調べて使ってみてください。

Armoris日記 仕事で思うこと...

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、うれしく思います。

問題を作る時に気をつけていること

今回も技術ネタではなく、普段CTF用の問題を考える際に気をつけていることを書こうと思います。

私が普段問題を作る時に最も気をつけていることは、「問題文から必要な情報が削がれることを防ぐ」です。

これは、問題の作成者は正答がわかっていて、かつ、解き方もわかっているため、無意識のうちに削ってしまう情報のことです。
「なぜこのような現象が起きてしまうのか」ですが、これは問題作成者の脳内(思考)では、問題文にいくつか特定のキーワードがあれば容易に正答を導き出すことができてしまうので、その結果、もう少し挑戦者に考えてもらえる問題を作ろうとしてしまい、本来挑戦者にとっては正答に到るためにとても重要なキーワードを問題文から無意識のうちに外してしまうからではないかと考えています。

これによって挑戦者は正しいと確信して回答したにもかかわらず、不正解となってしまうため混乱が生じてしまい、結果としてなかなか正答に辿り着けない問題が出来上がってしまうわけです。
f:id:Armoris:20200703143933p:plain:w250
もちろんオープンな場所で行われるCTFや上級者向けとして作成された問題であればそのような問題もあって良いと思いますが、問題に挑戦する参加者のレベルが初心者〜上級者など幅広い場合や、特定の意図をもったトレーニングとして行う場合には、適しているとは言えないと思います。

私はこの問題を解決するために、出来上がった問題を社内の人に実際にやってもらい、その感想を聞いています。
特に、技術系の人以外に解いてもらうことで得られる別視点からの意見も重要だと考えています。 理由は単純で、技術系の人であればある程度説明が足りない場合でも問題文の意図が伝わってしまうことが多いからです。
f:id:Armoris:20200703144238p:plain:w300
以上私が普段問題を作る際に気をつけていることを書いてみました。

実際にできたものを多くの人に触れてもらい、たくさんのフィードバックを受けることは、多面的に物事をとらえることにつながるため、(CTFの)問題作成以外の部分でもとても重要なことだと思います。

Armoris日記 DOJO Lite紹介

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、うれしく思います。

Armoris DOJO

今回のArmoris日記はArmoris DOJOについてのお知らせと新サービスの宣伝です。

このたびArmoris@秋葉原にて DOJOを縮小再開しました。
加えて、DOJO Liteという新サービスをリリースしました。

簡単にDOJO Liteのご説明をさせていただきますと、 DOJO Liteとは「セキュリティに必要な問題解決能力の初歩として「正しく聴く」「正しく理解する」「正しく考える」」ことをコンセプトに初心者でも安心してチャレンジできる講座です。
毎回、実際に発生した過去のセキュリティインシデント事案をテーマに、講師による詳細な解説と、講師・受講者間のディスカッションを交えた構成としており、セキュリティにおける大切なポイントや考え方等の基礎を学ぶことができます。

私はこの中でも「正しく理解する」と言う部分が非常に難しいと考えています。

実際に、自分が「正しく理解」していると思っていることでも、実はなんとなく「理解したつもりになっている」に過ぎないと言うことが多々あります。
もし、自分が正しく理解していなければ、人に何かを教える際に間違ったことを教えてしまうことにもなりかねません。
私もそうならないように正しく物事を理解し、DOJO生に伝えていくことができるように頑張っていきたいと思います。

また、DOJO Shotという2日間コースの短期トレーニングやDOJO Ultmateという演習支援プログラムも別途あります。

各種トレーニングの予約など、詳しくは Armoris公式ホームページこちらからご覧になれますので、お気軽にアクセスしてみてください!

Armoris日記 社内Discordにて

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、うれしく思います。

今週の社内Discordにて

以下は社内で使用しているDiscord上で行われた会話の一部です。一見よくある出来事の様に見えますが、少し考えてみましょう。

K氏
「事務所のプリンターで印刷できません...。印刷しようとするとPCで保留されます!!!」

T氏
『PCのWi-Fiはプリンターと同じネットワークになってますよね?』

K氏
Wi-FiってHOGE-WiFiですよね?今それに繋いでいます。」

T氏
『いや、Wi-FiはHUGA-WiFiですね。HOGE-WiFiだと別ネットワークなので使えないです。』

K氏
「あれ、そうなんですね。」

T氏
『もしかして設定していない!?』

K氏
「いや、接続したら印刷できました!」

今回はどちらも社内のWi-Fiでありその後目的の印刷ができた様ですが、状況が違った場合どうなってしまうでしょうか。
f:id:Armoris:20200618160716p:plain
もし最初に接続されていたWi-Fiが近くのFreeWi-Fiや他社のネットワークで、ネットワーク内にプリンターが接続されていた場合です。
この状況で間違って機密情報等を印刷してしまうと、情報漏洩につながり取り返しのつかないことになってしまうことは、容易に想像できると思います。

実際に同様の状況で情報漏洩が発生したケースも報告されており、一歩間違えれば大きな被害につながります。

今回のケースは、本来接続したかったWi-Fiとは別のアクセスポイントに自動接続されていたことが原因でした。
一度接続したことのあるアクセスポイントに勝手につないでくれる「自動接続機能」は便利な機能ですが、このような事態が起きることもあります。

皆さんも自分が意図したアクセスポイントに接続できているか、念のためチェックする習慣をもつと良いかもしれません。
そうすることで今回の事例だけでなく、不審なWi-Fiに接続してしまい盗聴されるなどのリスクを減らすことができます。

このようなミスを防ぐ方法として、組織内で一定のルールを設けたり、普段から一人一人が意識することなども考えられます。 f:id:Armoris:20200618191416p:plain
最後に外部から見えている日本のプリンターを少し調べてみました。
これが全てではありませんが、309台のプリンターが外部から接続できる状態だとわかります。

また何かあればArmoris日記としてブログにしたいと思います。

※これは一個人の意見です。

Armoris日記 THE First

このブログは、3月までN高等学校に潜んでいた株式会社Armorisの社員が、日頃の業務で発見したことや、得られた様々な知見を広く皆さんと共有することを目的として開設しました(予定)。
とりとめのないことを書き連ねることもあるかもしれませんが、何かのお役に立つことがあれば、とてもうれしく思います。

直近の取り組み

この記事の筆者は、最近、トレーニング用の教材として使うCTF問題を作っています。 CTFについてWikipedia f:id:Armoris:20200610122948p:plain
画像はCTFフレームワークのCTFd

問題の中には作る人の趣味が反映された問題がいくつかあり、例えばある時点のニコニコ動画のバージョンについて調べて答えてもらうと言う問題もあります。

ニコニコ動画とは株式会社ドワンゴが運営する動画サイトのことですが、有名なサイトなので名前を聞いたことがある方も多いと思います。
しかし、このニコニコ動画に面白いバージョン名がついていることを知っている人は少ないのではないでしょうか。

例えば、現在(2020年6月時点)のニコニコ動画のバージョン名は「く」で、過去には「原宿」や「GINZA」と言った名前が使われていました。
実はこのバージョン名、ニコニコ動画の歴史が深く関わっていたりします。 f:id:Armoris:20200610123843j:plain
ニコニコ動画(く)

問題の話に戻しますが、いきなり聞いたこともないサービスについて答えろと言われても、普通は困りますよね。
しかし、「ニコニコ動画 バージョン一覧」というキーワードで、Google検索を駆使して調べるという発想ができれば、この問題は難なく解くことができます。

ですが、もしかしたら「何かあるのでは?」と難しく考え過ぎてしまい、なかなか正解にたどり着けない人もいるかもしれません。
もちろん、これまでITに触れる機会が少なかった方たちにも、この様なクイズ形式の問題を通して、いろいろなツールの使い方や情報収集の方法を知ってもらい、日々の業務や日常生活において役立ててもらえればなと思っています。