荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Rog (我要开始努力学习), 信区: InstallBBS
标  题: [转载] [转寄] bbs的安全建议                          STW
发信站: BBS 荔园晨风站 (Fri Dec 18 23:54:55 1998), 站内信件

【 以下文字转载自 Linux 讨论区 】
【 原文由 Lg 所发表 】
【 以下文字转载自 Lg 的信箱 】
发信人: STW (蓝快), 信区: BBSbuild
标  题: bbs的安全建议
发信站: 广州蓝天站 (Tue Dec 30 11:06:36 1997), 转信
[转载]

                      BBS 系统安全的一些建议

                     新手必读        老手参考

前言

BBS在台湾的网路上是一种相当普及,而且异常普及的服务,但是,由於许多种类的
BBS由於太过容易架设,以及网路安全观念的普遍不足,使得有许多BBS的站长在对
系统的熟悉度不足的情形下,就架起BBS站,开始服务,导致BBS的系统安全普遍相
当薄弱,许多BBS简直只能用不堪一击来形容,往往系统已经被入侵了,站长还不知
道,无辜的BBS USER的隐私就如此的被轻易的侵犯了.
另外,由於在台湾系统安全并未如同国外一般的公开讨论与检验,所以许多国人自
行改写的软体产生了许多系统漏洞而不自知,许多支援中文的BBS也因为没有加以
考验而包含了不少系统漏洞.近闻twcert的成立,也许能够改善这种现象.
以下,就是个人对於BBS系统安全的一些建议,建议的对象主要是BBS的架设者以及
程式设计者,

1 心态
  BBS的站长必须认知自己所要担负的责任,除了保障系统的稳定,功能,以及效率外,
也必须维护使用者的隐私,不能泄漏使用者的私人资料,也不能偷窥使用者的私人
信件和通讯.保障系统的安全是其中的重要的一环.至於责任的大小,与你所开的站
的性质以及大小有关.不管如何,这都是一个不小的责任,要负担这个责任,必须要
对系统足够了解,以及拥有足够的热诚,如果你不确定你有能力能负担这个责任,或
者你确定你没有这个能力,建议你不要架设BBS站,或者,至少必须非常明确的对你的
USER表明这一点.
  BBS的程式发展者,如果你的程式公开让人使用,也有类似的责任,在追求系统花俏的
功能以及系统安全之间,个人认为安全比较重要.完全避免安全的漏洞当然是不容易
的,但至少应当尽力避免,如果对於系统安全毫无认知,请不要设计类似的软体.网路
安全的基础知识,是设计这类网路服务软体的程式设计者所必须具备的.


2 外部程式
  BBS的站长,架设外部程式请特别小心,因为不当的外部程式设定很容易让BBS使用者
对贵机器造成破坏.
  一个极端的例子是,我曾经见过某BBS,可以某些地方让你选择editor , ve, vi ,或
joe.其中,以vi为例子好了, :!/bin/sh 的这个指令 , 就足以拿到shell了.除此之外,
vi当然还可以让你用bbsuser 的权限读取,写入几乎的任意档案.
  许多BBS提供 news , www ,gopher,telnet,kochess,qkmj,irc 等等client,却没有
做适当设定. 比方说,有些telnet 在按下^] 之後 , 输入 !,就会拿到shell, 有些,至
少可以 close 一个connection 之後,再open到另外一个地方.lynx 的print pipe,
bookmark , 大写G指令 等等 ,也都有可能拿到shell或让使用者telnet 到任意地方,
拿到 shell的危险性大家应该都清楚,至於可以telnet 到任一地方有何危险呢?
cracker 可以利用你的机器突破防火墙,匿名做坏事,还有,许多 innbbsd会对hostname
做access限制,cracker 就可以利用网路间的信任关系,利用你的机器来做入侵别台机器
的跳板.
  许多软体的功能都很强大,会有许多超出你意料之外的功能,入侵者比你熟悉软体,他们
可以巧妙的利用这些软体的功能,发挥他们到及致,用这些功能来做你不想他们做的事情,
包括读取你的私人信件!!
  其实, gopher , lynx等等的client都可以做相关的安全限制,只是许多站长不了解而
已,而基本上,许多服务的client都有危险性,多提供一种服务,就多增加一分风险,除非
你真的能保证你所提供的服务不会造成安全上的问题, 否则 , 请不要提供这些服务!!
相信我,少提供一两样服务没有什麽关系的!!!!!
  原则是,不管提供任何服务,都请确认你真有把握不会造成安全问题!!!!!
  如果不确定的话,请不要开任何服务,不是跑个两下看起来没问题就算成功!!!


3 功能太强的 system 和 popen
  system 和 popen 这两个函数,基本上,都会呼叫 /bin/sh -c 来执行指令, 由於
UNIX 的 shell 功能相当强大好用, 即使是最原始的/bin/sh ,许多人也不是完全了
解他的功能 ,另一方面,由於真的功能强大,许多程式设计师在写程式时, 为了方便起见
也常常利用这两个函数来简化程式.
  由於这两个原因, 当cracker 对shell的了解度比bbs 程式设计师强的时候 ,就有可
能造成BBS 的安全漏洞.
  比方说 , 假设一个程式设计师,为了方便起见, 把寄信这个指令写成
sprintf(buf,"mail %s < %s", email_addr ,filename);
system(buf);

如果, email_addr  没有被确实检查, 可能让使用者输入下面这样的 email addres
 a@b;/bin/sh -i;/bin/ls
就造成了出现一个简单入侵的情形.
还有可能输入
 a@b`rm -fr /home/bbs`
 a@b>/home/bbs/.PASSWDS
之类的"email address"也有可能

所以,只要用到 system 或者popen的话,就要特别小心!事实上,这两个指令能省就省!

一般而言,下面这些字元,都有可能造成危险!!
* & " \ > < ` ' " ! # \n \r 0xff ? [ ] ; $ ( ) / .

事实上,虽然不少这类的问题已经消失了,但现在仍然存在的例子还很多.

4 档案名称
 BBS 的架站者都不希望user 看到不该看的东西.比方说站长本身的私人信件, 或
者BBS的密码档.但就UNIX的系统权限而言, 不管你是站长还是guest ,你在跑BBS时
,在OS看来,你都是用bbs uid来跑程式的,所以,BBS程式会限制user 读取档案的自由度
, 但有时,由於程式设计者的疏忽,情形并不是这样.
这种情形有很多可能, 最典型的例子, 就是板主编精华区的例子, 有些BBS会让板主
输入精华区档案的档名,但是,档名没有详加检查,使得板主可以编辑 ../xxxx
或者, .Names 之类的档案,导致板主可以编辑其他USER 的信件等等,甚至密码档.
(如果有些bbs用 system("mkdir %s",dirname) 那更惨 )
所以,在开档案的时候,要特别注意档名的限制.

5 /tmp
  很多版本的BBS 和innbbsd , 会利用 /tmp 来储存暂存档, 由於 /tmp 是公开的目录
, 所以, 如果bbs的主机上, 有一些非 bbs的帐号, 那麽,那些帐号的拥有人,或者,猜到
那个帐号密码的cracker ,就有可能利用那个普通帐号来入侵或者破坏BBS.
一个简单的方法是, 假设,你知道 bbs 会在 /tmp 之下,开一个暂存档 abc,
然後写入一些资料, 然後删除, 那麽, 你只要 ln -s /home/bbs/.PASSWDS /tmp/abc
然後呢,就等著bbs 写入资料到 /tmp/abc时, 破坏 .PASSWDS档.
当然,随著程式设计的写法不同,也可能达不到破坏的目地,但也有可能, 你可以让
BBS 写入特定的资料到 .PASSWDS档, 让你有SYSOP的权力.
当然 , 也不一定要.PASSWDS档.也有可能是.rhosts , .forward 之类的档案.
(如果,你不知道.forward 或者.rhosts是做什麽的,请自己找答案,或者,放弃架设BBS)
也有可能下列的情形, 你在/tmp之下,开了一个 abc 的档案,然後 chmod 700
, 当 bbs用到这个档案时,无法写入,也无法读取,造成错误.造成,比方说,
无法转信, 或者某些user 无法把信件打包带回.
也有可能, 你开启一个 chmod a+w 得档案在/tmp , 还是假设是abc 好了,
又假设 bbs 会利用 /tmp/abc 当做user abc 信件打包带回的暂存档, 它可能把
abc 的信件,压缩打包写入 /tmp/abc 之中, 然後 , 寄给abc指定的位置, 然後
尝试rm /tmp/abc , 但是,现在,由於 /tmp/abc的owner是你, bbs当然砍不掉.
(当然chmod a+t /tmp)
可能性相当多, 因此 ,把暂存档放在 ~bbs/tmp 比较好.

6 buffer overoverflow
  任何阵列都要小心他的长度限制,假设,
 你strcpy(a small buffer, a big buffer);
轻则让系统当机,重则让入侵者有机可乘.
如果你的small buffer 在stack之中, 入侵者有可能利用利用某些特定的质,
覆盖small buffer ,有可能执行任意指令.
  如果入侵者没办法这样做,也有其他选择,如果, small buffer 在记忆体的位置,
刚好在 某些重要变数之前, 就有可能修改这些重要变数.
这些重要变数可能是, username , from host , 或者是system 的参数,
或者是 fopen 的参数等等.花样相当多!!!!
程式设计者千万不要因为省事,而不注意buffer 的长度.
strcpy , gets , sprintf 等等 ,都是可怕的函数.

7 环境变数
原则是, 只传入可信赖的环境变数给 bbs,
不管你是由 in.?bbsd ,或是 bbsrf 还是telnetd 呼叫bbs,  请注意,
不要传入任何环境变数给 bbs, (也许除了 TERM 例外);
在execl("bin/bbs" .... 之前, 请确定
extern char **environ;
char **env={"TERM=vt100",NULL};
environ=env;
因为,许多环境变数都有它特殊的意义,每个程式也都会利用一些环境变数来做特殊设定,
你知道 IFS, LD_PRELOAD , LC_CTYPE , RFC931 , REMOTEHOSTNAME , 等等,被那些程式
拿来当做什麽用途吗?
甚至, 这些环变数还有可能拿来做buffer overflow 的用途,(事实上,已经有这样的程式
在留传著, 某些版本的bbs,入侵者很轻松的利用这个方法入侵)
或者, 可能用这些变数来欺骗BBS和一些程式,我说过, 你不可能完全了解这些环进变数
是如何被使用的,

8 SNP
由於 ptelnetd 的一些问题,最好不要开ptelnet 的公用帐号, 而且,你可能会设定错误,
让人可以用这些公用帐号pftp进去.
有关SNP的部份,有时间的话另外专文介绍.
本节虽然写的不长,但是,很重要, 在重覆一次,不要让人用ptelnet 进入BBS !!!
已经有一个广为留传的方法,利用这个漏洞入侵BBS了!!!

9 bpop3 , bgopher 等等
 在你不确定你了解的情形下,不要增加服务!!

10 bug 随处都在
  写过程式的人都知道,有时,不小心打错一个字,就可能造成一个让你找破头的bug了,
像BBS这样有点大的程式,当然很可能隐藏著许多bug ,这些bug什麽地方都有可能出现,
入侵者也都有可能利用这些问题入侵, 所以小心谨慎, 以即正确的观念可以帮你防范
或者即早发现可能发生的未知漏洞,发生入侵事件时,也有可能找到原因或者降低损失.
以下有几点简单的建议:
1) 把整个bbs chroot , 或者,执行外部程式时,先chroot .
如果可能的话, 两者都做.
2) 定期备份.
3) 在不侵犯使用者隐私的前提之下,尽量多log .
4) 多注意有关系统安全的资讯,
5) 尽力维护系统安全
6) 不要完全的信任任何人,可以信任,但必须考虑到万一发生问题的後果 你所应该要负的
        的责任

其实,还有一些问题, 以後有机会再说

--
※ 修改:.STW 于 Dec 30 11:07:49 修改本文.[FROM: 172.21.81.20]
※ 转载:.广州蓝天站 bbs.[FROM: 172.21.81.20]
--
※ 转寄:.广州蓝天站 bbs.gznet.com.[FROM: 172.21.24.100]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.1]
--
※ 转载:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.0.141]
※ 修改:·jjk 於 Dec  3 15:22:35 修改本文·[FROM: 192.168.0.146]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店