An attack surface in information security is any area where an unauthenticated user can run or input code into the system. This is split into three areas: network, software and human attack surface. While surfaces are technically only a measure of how unauthenticated users can access the system, another attack can come from a trusted employee. There are ways of reducing an attack, such as making fewer functions to which users can add code, having less code in general, and splitting up these functions so only trusted users can access them. Reducing attack surfaces does not reduce the damage an attack can inflict, only the odds that an attack will occur.
When dealing with programs, networks and websites, there is always going to be an attack surface. Some surfaces can be reduced or eliminated, but some are vital to the success of a program. For example, an input form that lets users write messages is considered a security threat. At the same time, if there is a program or website that needs to gather information from users, and the user needs to type the information manually, an input field is the only way to make this possible.
Attack surfaces are measured in three categories. Network attack surfaces are in the network and are primarily caused by open ports or sockets, or by having tunnels boring into the network. Tunnels are sometimes hard to find, because they may appear to be regular traffic on the network. A software attack surface is any area or function in a program that a user can use, regardless of position or authentication.
The human attack surface is different from the other two, because network and software surfaces are based on unauthenticated users. The human surface involves disgruntled or unscrupulous employees stealing or destroying data. If an employee leaves the company and a new employee has to gain access to data, this also is considered a security threat, because it's not yet clear how much trust can be placed in the new employee.
Reducing an attack surface differs, depending on what area is being reduced. With network surfaces, all ports and sockets should be closed to all users other than trusted sources. In software surfaces, the amount of overall code should be limited to its minimum, and the amount of functions available to unauthenticated users should be confined to just a few areas. Human surface reducing can be difficult, and this can only be done effectively by giving new employees the minimum amount of freedom to perform functions until he or she is trusted with the data.