Why Learn C?
It is one of the most popular programming language in the world
If you know C, you will have no problem learning other popular programming languages such as Java, Python, C++, C#, etc, as the syntax is similar
C is very fast, compared to other programming languages, like Java and Python
C is very versatile; it can be used in both applications and technologies
2. About this course: topics & goals
• Standard ways in which software can be exploited
– understanding how such attacks work
– understanding what makes these attacks possible
– doing some attacks in practice
• Root cause analysis: why are things so easy to hack?
• This involves understanding
– programming languages, compilers, and operating systems,
and the abstractions that they provide
– the languages, representations, and interpretations involved
– the potential for trouble – in the form of software vulnerabilities -
all this introduces
hic 2
3. Hacking in C
• security problems in machine code compiled from C(++) source code
running on standard CPU and operating system.
• to understand this, we need to know how
– the data representations involved
– the memory management that the programmer has to do
hic 3
4. Prerequisites
• Imperatief Programmeren
– we won’t use C++, but C
– biggest change: using printf instead of >> ?
• Processoren
– what is the functionality that a typical CPU offers, on which we
have to run our software written in higher-level languages?
Eg. fetch-execute cycle of the CPU, with Program Counter (PC)
registers where in the code we are, which is modified for a JUMP
instruction and incremented for the other instructions
hic 4
5. Lectures & lab sessions
• Lectures Mondays 13:45-15:30 in HG00.304
• Lab sessions Thursdays 10:45-12:30 in HG00.137 & HG00.625
Aanstaande woensdag: als je al bekend met Linux command line
ga dan naar HG00.625
• All course material will be on
http://www.cs.ru.nl/~erikpoll/hic
hic 5
6. Lab exercises
Weekly lab session with weekly programming/hacking exercise
• Exercises to be done in pairs
• Doing the exercises is obligatory to take part in the exam;
• Exercises will be lightly graded to provide feedback,
with nsi-regeling:
you can have only one exercise niet-serieus-ingeleverd
• You learn stuff in the exercises that you won't learn at the lectures,
and vv.
• Beware: exercises of one week will build on knowledge & skills from
the previous week
• Also: turning up for the lab sesions might be crucial to sort out
practical problems (with C, gcc, Linux, ...)
hic 6
7. Lab exercises
We use
• C as programming language, not C++
• Linux from the command line aka shell
• the compiler gcc
So no fancy graphical user interfaces (GUIs)
for the operating system (OS) or the compiler
Why?
• GUIs are nice, but hide what OS and compiler are doing
• the command line is clumsy at first,
– using commands instead of pointing & clicking
but gives great power
– we can write shell scripts: programs that interact with the OS
hic 7
8. ‘to hack’
NB several meaning and connotations, incl.
1. To write software in a clever way
– to really exploit all the capabilities a system offers
2. To break into a computer system.
3. To fix some problem in a quickly & ugly way
Focus of this course 1 & 2.
hic 8
9. How do you break into a computer system?
1. Using user credentials – username/password
How do you get those?
– default passwords
hic 9
12. How do you break into a computer system?
1. Using user credentials – username/password
How do you get those?
– default passwords
– phishing
– brute forcing
– eavesdropping,
• on unsecured network connection,
• with keylogger hardware or software keylogger
– using stolen password files
• which may need to be brute forced, if passwords are hashed
– ...
2 Using flaws in the software
– Focus of this course & web security next quarter
hic 12
13. Security problems in software
Terminology can be confusing:
(security) weakness, flaw, vulnerability, bug, error, coding defect, ...
Important distinction:
1. security weakness/flaw:
something that is wrong or could be better
2. security vulnerability
weakness/flaw that can actually be exploited by an attacker,
This requires the flaw to be
1. accessible - attacker has to be able to get at it
2. exploitable – attacker has to be able to do some damage with it
Eg by unplugging your network connection, many vulnerabilities become flaws
Warning: there is no standardised terminology for the distinction above!
hic 13
15. design vs implementation flaws
Software vulnerabilities can be introduced at different “levels”
• design flaws
– fundamental error in the design
• implementation flaws or coding error
– introduced when implementing
The precise border is not precise
it can be debatable whether a flaws is a design or implementation flaw
To understand implementation flaws, we need to look 'under the hood'
of how a programming language works
hic 15
focus of
this course