PIS-M3-Ktunotes.In .Pdf
Total Page:16
File Type:pdf, Size:1020Kb
CS472 - Principles of Information Security Module III Software vulnerabilities: Buffer and stack overflow, Cross site scripting (XSS) and vulnerabilities, SQL injection and vulnerabilities, Phishing. Vulnerabilities • A vulnerability is a weakness or lacuna in a policy, procedure, protocol, hardware or software within an organization that has the potential to cause it damage or loss. Vulnerability Types • Human Vulnerabilities – Induced by careless/unthinking human behaviour – Ex. clicking on a link in an e-mail message from a questionable source – Related to phishing and cross-site scripting attacks • Protocol Vulnerabilities – Attacks on commonly used networking protocols such as TCP, IP, ARP, ICMP and DNS – Ex. Connection hijacking caused by ARP spoofing, etc. – Denial of Service Attacks (DoS) which exploit the 3-way TCP handshake – Pharming attacks exploit vulnerabilities in DNS • Software Vulnerabilities – Caused by sloppy software – Software may perform as expected under normal conditions but when provided with a specific input, it turns malicious – Examples include Buffer Overflow vulnerability, Cross-site Scripting (XSS) vulnerability and SQL Injection vulnerability • Configuration Vulnerabilities – relate to settings on system/application software, on files, etc. – Read-write-execute (and other) permissions on files (and other objects) may be too generous. – Privilege level assigned to a process may be higher than what it should be to carry out a task. – Often lead to “privilege escalation” attacks. CS409(PIS)/Module3/CSE/SBCE 1 Downloaded From www.ktunotes.in Software Vulnerability • A software vulnerability is a security flaw, glitch, or weakness found in the software or in an OS (Operating System) that can lead to security concerns. • a vulnerability can be an error in the way that user management occurs in the system, an error in the code or a flaw in how it responds to certain requests. • One common vulnerability allows an attack called a SQL injection. It works on websites that query databases, such as to search for keywords. An attacker creates a query that itself contains code in a database programming language called SQL. • If a site is not properly protected, its search function will execute the SQL commands, which can allow the attacker access to the database and potentially control of the website. Common types of software flaws that lead to vulnerabilities include: • Memory safety violations, such as: ✓ Buffer overflows and over-reads ✓ Dangling pointers • Input validation errors, such as: ✓ Code injection ✓ Cross-site scripting in web applications CS409(PIS)/Module3/CSE/SBCE 2 Downloaded From www.ktunotes.in ✓ Directory traversal ✓ E-mail injection ✓ Format string attacks ✓ HTTP header injection ✓ HTTP response splitting ✓ SQL injection • Privilege-confusion bugs, such as: ✓ Clickjacking ✓ Cross-site request forgery in web applications ✓ FTP bounce attack • Privilege escalation • Race conditions, such as: ✓ Symlink races ✓ Time-of-check-to-time-of-use bugs • Side-channel attack ✓ Timing attack • User interface failures, such as: ✓ Blaming the Victim prompting a user to make a security decision without giving the user enough information to answer it ✓ Race Conditions ✓ Warning fatigue or user conditioning. Buffer OverFlow (BOF) • The BOF vulnerability is one of the oldest and, by far, the most common of software vulnerabilities. • As early as 1988, the Morris worm was one of the first to exploit this vulnerability. • Since then, many creative ways of converting such a vulnerability into an exploit have been devised. • A buffer overflow (BOF) occurs when the space allocated to a variable (typically an array or string variable) is insufficient to accommodate the variable in its entirety. • For example, a certain amount of buffer space is allocated for an array. If array bounds are not checked while populating it, the array may overflow into contiguous memory and corrupt it. • Interestingly, this could cause an attacker to subvert the normal flow of a program. Malicious code supplied by the attacker in the buffer could be executed. CS409(PIS)/Module3/CSE/SBCE 3 Downloaded From www.ktunotes.in • A buffer (or array or string) is a space in which data can be held. A buffer resides in memory. Because memory is finite, a buffer's capacity is finite. For this reason, in many programming languages the programmer must declare the buffer's maximum size so that the compiler can set aside that amount of space. • In information security and programming, a buffer overflow, or buffer overrun, is an anomaly where a program, while writing data to a buffer, overruns the buffer's boundary and overwrites adjacent memory locations. ... Exploiting the behavior of a buffer overflow is a well-known security exploit. • Let us look at an example to see how buffer overflows can happen. • Suppose a C language program contains the declaration: char sample [10]; • The compiler sets aside 10 bytes to store this buffer, one byte for each of the 10 elements of the array, sample [0] through sample [9]. Now we execute the statement: sample [10] = 'B’; • The subscript is out of bounds (that is, it does not fall between 0 and 9), • so, we have a problem. The nicest outcome (from a security perspective) • is for the compiler to detect the problem and mark the error • during compilation. However, if the statement were sample[i] = 'B'; • Let us examine this problem more closely. It is important to recognize that the potential overflow causes a serious problem only in some instances. • The problem's occurrence depends on what is adjacent to the array sample. For example, suppose each of the ten elements of the array sample is filled with the letter A and the erroneous reference uses the letter B, as follows: for (i=0; i<=9; i++) sample[i] = 'A’; sample[10] = 'B' CS409(PIS)/Module3/CSE/SBCE 4 Downloaded From www.ktunotes.in • If the extra character overflows into the user's data space, it simply overwrites an existing variable value (or it may be written into an as-yet unused location), perhaps affecting the program's result, but affecting no other program or data. • In the second case, the 'B' goes into the user's program area. If it overlays an already executed instruction, the user should perceive no effect. If it overlays an instruction that is not yet executed, the machine will try to execute an instruction with operation code 0x42, the internal code for the character 'B’. • If there is no instruction with operation code 0x42, the system will halt on an illegal instruction exception. Otherwise, the machine will use subsequent bytes as if they were the rest of the instruction, with success or failure depending on the meaning of the contents. Again, only the user is likely to experience an effect. Why is buffer overflow A vulnerability? • Key Concepts of Buffer Overflow. This error occurs when there is more data in a buffer than it can handle, causing data to overflow into adjacent storage. This vulnerability can cause a system crash or, worse, create an entry point for a cyberattack. C and C++ are more susceptible to buffer overflow. CS409(PIS)/Module3/CSE/SBCE 5 Downloaded From www.ktunotes.in Why buffer overflow is a problem? • A buffer overflow can occur inadvertently, but it can also be caused by a malicious actor sending carefully crafted input to a program that then attempts to store the input in a buffer that isn't large enough for that input. If the excess data is written to the adjacent buffer, it overwrites any data held there Impact Buffer Overflow Vulnerability: • Unstable Program Behavior • System crash • Memory access errors • Code over-riding • Security exploitation threat • Un-authorized data access • Excursive privilege actions • Data theft and Data loss Types of Buffer Overflow Vulnerabilities: • Generally there are two types of Buffer vulnerabilities coined depending on specific feature categorization and structure of memory overflow. ▫ Stack Overflow Vulnerabilities ▫ Heap Overflow Vulnerabilities Stack Overflow Vulnerabilities • The stack resides in process memory of our system with a fixed storage capacity and has a Last-In-First-Out data structure. It manages all the memory allocating and memory free-up functions without manual intervention. When the memory input exceeds the limit of stack an overflow occurs resulting in data exploit. A stack overflow can occur in following cases: ✓ Outbound declaration of variables ✓ Infinite recursion What does stack overflow mean? • A stack overflow is an undesirable condition in which a particular computer program tries to use more memory space than the call stack has available. In programming, the call stack is a buffer that stores requests that need to be handled. ... It is usually defined at the start of a program. CS409(PIS)/Module3/CSE/SBCE 6 Downloaded From www.ktunotes.in What is stack overflow attack? • In software, a stack buffer overflow or stack buffer overrun occurs when a program writes to a memory address on the program's call stack outside of the intended data structure, which is usually a fixed-length buffer. ... Stack buffer overflow can be caused deliberately as part of an attack known as stack smashing. Stack Basics • A stack is contiguous block of memory containing data. • Stack pointer (SP) – a register that points to the top of the stack. • The bottom of the stack is at fixed address. • Its size is dynamically adjusted by kernel at run time. • CPU implements instructions to PUSH onto and POP off the stack. Lower memory addresses High memory addresses • A stack consists of logical stack frames that are pushed when calling a function and popped when returning. Frame pointer (FP) – points to a fixed location within a frame. • When a function is called, the return address, stack frame pointer and the variables are pushed on the stack (in that order). • So the return address has a higher address as the buffer. • When we overflow the buffer, the return address will be overwritten.