0

シンボリックリンク攻撃を学習する次の記事を参照しています。

struct stat st;
FILE * fp;
if (argc != 3) {
 fprintf (stderr, "usage : %s file message\n", argv [0]);
 exit(EXIT_FAILURE);
}

if (stat (argv [1], & st) < 0) {
 fprintf (stderr, "can't find %s\n", argv [1]);
 exit(EXIT_FAILURE);
}

if (st . st_uid != getuid ()) {
 fprintf (stderr, "not the owner of %s \n", argv [1]);
 exit(EXIT_FAILURE);
}

if (! S_ISREG (st . st_mode)) {
 fprintf (stderr, "%s is not a normal file\n", argv[1]);
 exit(EXIT_FAILURE);
}

sleep (25);

if ((fp = fopen (argv [1], "w")) == NULL) {
  fprintf (stderr, "Can't open\n");
  exit(EXIT_FAILURE);
}
 
fprintf (fp, "%s\n", argv [2]);
fclose (fp);
fprintf (stderr, "Write Ok\n");
exit(EXIT_SUCCESS);

プログラムがスリープ状態にrmなると、ファイル名であるarg [1](別の端末を使用)を使用して、同じファイルのシンボリックリンクを作成します。記事で述べたように実行したとき、リンクが指しているファイルに書き込んでいます。

次に、straceを使用して同じ引数を渡し、「cant open」を取得しました。これは、arg[1]として渡されたファイルにアクセスできないことを意味します。しかし、これは私が通常実行した場合には当てはまりません。straceはこれをどのように検出しますか?どんな助けも非常に価値があります。

このような攻撃を検出するために、ptraceを使用して独自のアプリケーションを作成しています。これを検出するためにiノード番号を使用しようとしましたが、アプリケーションはまだ渡したファイルのiノード番号を参照しています。

4

1 に答える 1