Use file attributes to prevent intruders from removing traces of their break-in. In the course of an intrusion, an attacker will more than likely leave telltale signs of his actions in various system logs. This is a valuable audit trail that should be well protected. Without reliable logs, it can be very difficult to figure out how the attacker got in, or where the attack came from. This information is crucial in analyzing the incident and then responding to it by contacting the appropriate parties involved [Hack #100] . However, if the break-in attempt is successful and the intruder gains root privileges, what's to stop him from removing the traces of his misbehavior? This is where file attributes come in to save the day (or at least make it a little better). Both Linux and the BSDs have the ability to assign extra attributes to files and directories. This is different from the standard Unix permissions scheme in that the attributes set on a file apply universally to all users of the system, and they affect file accesses at a much deeper level than file permissions or ACLs [Hack #4]. In Linux you can see and modify the attributes that are set for a given file by using the lsattr and chattr commands, respectively. Under the BSDs, ls -lo can be used to view the attributes, and chflags can be used to modify them. At the time of this writing, file attributes in Linux are available only when using the ext2 and ext3 filesystems. There are also kernel patches available for attribute support in XFS and reiserfs. One useful attribute for protecting log files is append-only. When this attribute is set, the file cannot be deleted, and writes are only allowed to append to the end of the file. To set the append-only flag under Linux, run this command: # chattr +a filename Under the BSDs, use this: # chflags sappnd filename See how the +a attribute works by creating a file and setting its append-only attribute: # touch /var/log/logfile # echo "append-only not set" > /var/log/logfile # chattr +a /var/log/logfile # echo "append-only set" > /var/log/logfile bash: /var/log/logfile: Operation not permitted The second write attempt failed, since it would overwrite the file. However, appending to the end of the file is still permitted: # echo "appending to file" >> /var/log/logfile # cat /var/log/logfile append-only not set appending to file Obviously, an intruder who has gained root privileges could realize that file attributes are being used and just remove the append-only flag from our logs by running chattr -a. To prevent this, we need to disable the ability to remove the append-only attribute. To accomplish this under Linux, use its capabilities mechanism. Under the BSDs, use its securelevel facility. The Linux capabilities model divides up the privileges given to the all-powerful root account and allows you to selectively disable them. In order to prevent a user from removing the append-only attribute from a file, we need to remove the CAP_LINUX_IMMUTABLE capability. When present in the running system, this capability allows the append-only attribute to be modified. To modify the set of capabilities available to the system, we will use a simple utility called lcap (http://packetstormsecurity.org/linux/admin/lcap-0.0.3.tar.bz2). To unpack and compile the tool, run this command: # tar xvfj lcap-0.0.3.tar.bz2 && cd lcap-0.0.3 && make Then, to disallow modification of the append-only flag, run: # ./lcap CAP_LINUX_IMMUTABLE # ./lcap CAP_SYS_RAWIO The first command removes the ability to change the append-only flag, and the second command removes the ability to do raw I/O. This is needed so that the protected files cannot be modified by accessing the block device they reside on. It also prevents access to /dev/mem and /dev/kmem, which would provide a loophole for an intruder to reinstate the CAP_LINUX_IMMUTABLE capability. To remove these capabilities at boot, add the previous two commands to your system startup scripts (e.g., /etc/rc.local). You should ensure that capabilities are removed late in the boot order, to prevent problems with other startup scripts. Once lcap has removed kernel capabilities, they can be reinstated only by rebooting the system. The BSDs accomplish the same thing through the use of securelevels. The securelevel is a kernel variable that can be set to disallow certain functionality. Raising the securelevel to 1 is functionally the same as removing the two previously discussed Linux capabilities. Once the securelevel has been set to a value greater than 0, it cannot be lowered. By default, OpenBSD will raise the securelevel to 1 when in multiuser mode. In FreeBSD, the securelevel is -1 by default. To change this behavior, add the following line to /etc/sysctl.conf: kern.securelevel=1 Before doing this, you should be aware that adding append-only flags to your log files will most likely cause log rotation scripts to fail. However, doing this will greatly enhance the security of your audit trail, which will prove invaluable in the event of an incident.
-
Seneste indlæg
Arkiver
- april 2026
- december 2025
- januar 2024
- december 2023
- november 2023
- oktober 2023
- september 2023
- marts 2023
- oktober 2022
- september 2022
- august 2022
- juli 2022
- juni 2022
- maj 2022
- marts 2022
- februar 2022
- december 2021
- oktober 2021
- september 2021
- august 2021
- marts 2021
- maj 2019
- april 2019
- januar 2019
- december 2018
- november 2018
- oktober 2018
- september 2018
- august 2018
- juli 2018
- maj 2018
- april 2018
- marts 2018
- januar 2018
- december 2017
- september 2017
- juli 2017
- juni 2017
- april 2017
- december 2016
- november 2016
- februar 2016
- januar 2016
- december 2015
- september 2015
- august 2015
- april 2015
- februar 2015
- december 2014
- september 2014
- august 2014
- juni 2014
- april 2014
- marts 2014
- februar 2014
- januar 2014
- november 2013
- oktober 2013
- september 2013
- juni 2013
- maj 2013
- april 2013
- januar 2013
- december 2012
- oktober 2012
- september 2012
- august 2012
- juli 2012
- juni 2012
- maj 2012
- maj 2011
- marts 2011
- februar 2011
- juni 2009
- maj 2009
- marts 2009
- december 2008
- november 2008
- oktober 2008
- august 2008
- juli 2008
- juni 2008
- april 2008
- marts 2008
- februar 2008
- januar 2008
- december 2007
- november 2007
- oktober 2007
- september 2007
- august 2007
- juli 2007
- juni 2007
- maj 2007
- april 2007
- marts 2007
- februar 2007
- januar 2007
- november 2006
- oktober 2006
- august 2006
- juli 2006
- juni 2006
- maj 2006
- april 2006
- marts 2006
- februar 2006
- januar 2006
- december 2005
- november 2005
- oktober 2005
- september 2005
- juni 2005
- maj 2005
- april 2005
- marts 2005
- februar 2005
- januar 2005
- december 2004
- november 2004
- oktober 2004
- september 2004
- august 2004
- juli 2004
- juni 2004
- maj 2004
- april 2004
- marts 2004
- februar 2004
- januar 2004
- december 2003
- november 2003
- oktober 2003
- september 2003
- august 2003
- juli 2003
- juni 2003
- maj 2003
- april 2003
- marts 2003
- februar 2003
- januar 2003
- juli 2002
- juni 2002
Kategorier
- Android (1)
- Ansible (1)
- Apache (53)
- Backdoors (3)
- Backuppc (1)
- Blog (2)
- Cisco (2)
- Development (1)
- Domain Name System (3)
- Exploits (4)
- FreeBSD (64)
- Hardware hacking (2)
- HP (1)
- HTML (2)
- Humor (10)
- I3WM (2)
- Intrusion detection (1)
- IRC (5)
- Irssi (1)
- Javascript (1)
- Knowledge Base (623)
- Kryptering (6)
- KVM (4)
- Lamp (5)
- Letsencrypt (1)
- LifeHack (2)
- Links (30)
- Linux (252)
- MobilPhone (1)
- Monitoring (3)
- Mysql (6)
- Nagios (9)
- Networking (152)
- Old Base (529)
- OpenBSD (4)
- OpenVPN (3)
- Opskrifter (1)
- OsX (1)
- PHP (13)
- Postfix (1)
- Programmering (50)
- Python (5)
- Retro hardware (2)
- Security (13)
- Shellscript (7)
- Sparc (1)
- SQL (24)
- SSH (9)
- Uncategorized (40)
- Vagrant (2)
- Videostreaming (1)
- Vim (7)
- VNC (1)
- Windows (24)
- Wordpress (3)
- Workstation (28)
- xcp-ng (1)
- Zfs (1)
Meta