After my discovery that we hadn't been doing a great job of removing the network access rights of ex-employees, I looked deeper to see how we could improve things. First, we instituted a new process to compare the active employee list and termination requests to the user accounts configured in our in-house and software-as-a-service offerings. As I explained last month, my team already does an account review every quarter to comply with SOX requirements, but we had only been comparing the active user accounts to the termination list to ensure that everyone who was supposed to be removed no longer had access. Now we are also doing a comparison of active user accounts to the list of active employees.
But in doing these comparisons, the focus has been on people -- the employees and contractors who are associated with each user account. I ignored accounts not associated with people. Now I'm going back and taking a closer look at those other accounts. They generally fall into four categories: service accounts, training accounts, test accounts and built-in administrator accounts.
Service accounts are used by software to connect to services with proper authentication and associate the correct set of rights with the software. I found two problems with these accounts. One is passwords, and the other is privileges.
Many of the service accounts I looked at have simple, easy-to-guess passwords assigned. For example, there is a service account called "oracle" that has a password that anyone could readily guess. But you wouldn't have to guess. The scripts our developers wrote for the oracle account have the password embedded in them, and that password is sent in the clear over the network when those scripts run. And who knows how long that password has been around? I'd bet that several system administrators have come and gone since that password was assigned. And since the password is set to never expire, it will remain like it is until somebody like me comes along and forces it to be changed (our system administrators value convenience over security). For now, I've asked them to change the password to something less guessable, and to find a way to obscure it in the scripts and over the network. I'm also looking into off-the-shelf products that can do this in a more automated way.
The other problem with the service accounts is excessive rights. Many of the Windows service accounts are part of the Domain Admins group, which gives them far more access privileges than they need. And some of the Unix service accounts are root-equivalent, which is also excessive in some cases. This is not easy to fix. Developers have to research best practices and recommendations from the vendors, which are rarely helpful. Then they have to make changes, test the functionality of the software services that use those accounts and try to fix whatever breaks because of the reduced privileges. Our developers are already overworked on business projects, so my concerns may stay on the back burner for a while, at least until some insistent requirement comes along that makes the problem a priority.
Training accounts are somewhat easier to address. We have roughly 100 Windows user accounts that are called train1, train2, etc. These are used by employees and customers who go through our training programs to learn how to use various software platforms. You'd easily be able to guess their passwords as well, but at least their privileges aren't excessive. I had the training department and system administrators work together to choose better passwords, and set them to expire every 90 days. I still don't like shared accounts like this, but I can comfort myself that their privileges are limited and the passwords are better now.
Test accounts had the same problem as training accounts. Scores of IT people over the years had created such accounts for various purposes. Some of these were easy to track down because they had "test" in the name. Others were more difficult to find, because some administrators created additional accounts in their name or accounts with other unexpected names. I was able to find these by subtracting all the known account names and looking at what was left. I instituted a new policy of naming test accounts after the people who use them, forcing the passwords to expire every 90 days and disabling the accounts when they are not actively being used.
Built-in administrator accounts are the final frontier. I'll talk more about those next time.
This week's journal is written by a real security manager, "J.F. Rice," whose name and employer have been disguised for obvious reasons. Contact him at email@example.com.
To join in the discussions about security, go to blogs.computerworld.com/security.