EDIT: All positions are filled

Every year, we are looking for young and adventurous students, with promising skills, eager to dig deeper into the field of security through its more technical side. The topics we propose are complex, challenging and will require a lot of efforts and sweat. But in the end, you will get the satisfaction to have learned a lot about security. All this without emphasizing enough the opportunity to work with the sometimes weird but always amazing Qb crew, especially when it comes to humour or training a Padawan.

All trainings are to be done in our main office in Paris, France. We encourage remote working, but that does not apply to trainings where the Padawans need to be among the team. That means the applier will need to have the proper visa to work with us if required.

Last but not least, we usually train Padawans so that they remain with us once the training period is done, even if that does not mean the training is over :)

How to apply for an internship position at Quarkslab?

If you feel like one of the internship offers below is the perfect fit for you, you have to send us:

  • a CV,

  • a cover letter: not the too general and too expected one, rather a more personal letter which explains why the topic is of particular interest to you, why you, why us :)

  • your solution proposal to the exercise attached to the offer of interest to you,

  • all this can be sent in French or in English.

Send this little package to internship-AT-quarkslab-DOT-com, with the title field containing the internship reference mentioned in the respective offer.

Do not forget that the secret of a good application is to show what you already realized (related to the topic or not). Be subtle.

Each internship offer comes with a little exercise which should not require too much time to be completed. The result will show us not only the type of skills and knowledge you already possess, but also how ingenious you are and how good you can present your reasoning. It will serve as the basis for the interview you will have in the selection process.

For all its internships, Quarkslab is looking for highly motivated, curious and autonomous people being creative and structured team players. You will evolve in a dynamic and easygoing environment where ideas spring from everywhere...

We consider internships as opportunities to spot profiles that suit our functioning. They are intended to guide students to enter the professional world as potential future colleagues if they feel like so and find convincing arguments [1]

Do not be shy and apply, otherwise you will never know if you could have been selected...

Contact : internship-AT-quarkslab-DOT-com

[1]also called croissants...

Dynamic Binary Instrumentation

This position is filled

Description

With software becoming more and more complex (high-level programming languages, massive concurrency, least-privilege isolation, sandboxing, ...), and great improvements achieved in the last decade in hardening and obfuscation, reverse engineering is still a real challenge. Reverse engineering through static analysis (as well as auto-magical decompilation) has its own limits. Dynamic binary analysis is now widely used, but depends on instrumentation tools, which need to be fast, reliable and powerful.

This internship is about working on our custom dynamic binary instrumentation (DBI) framework (which is modular, multi-platform and multi-architecture). The candidate will have to improve the code base, add new features, and write custom tools (such as a cross-platform Command Line Interface).

Exercise

Using an existing DBI framework of your choice (Intel Pin, Valgrind, DynamoRIO, ...), write a simple instrumentation tool able to create an execution trace of a function / program. This trace must include at least executed instructions and general registers values. Memory accesses (type, address and value) could be a nice bonus. As this is quite a common usage of a DBI, particular attention will be paid to the quality and originality of the proposal.

Required skills

  • Programming (C is required, C++ is a plus plus)

  • Some knowledge in reverse engineering

  • Basic understanding of x86_64 architecture (ARM is a plus)

Reference

16-internship-dbi

Duration

Between 4 and 6 months, preferably 6 months.

Security of TrustZone components

This position is filled

Description

The use of TrustZone becomes increasingly popular to handle sensitive data on a phone, such as protected media (DRM), payments, fingerprint authentication, etc.

The objective of this internship is to analyze and assess the security of TrustZone-related components on various Android mobile phones. The attack surface of the TEE (Trusted Execution Environments) will be evaluated. Tools such as fuzzers or debuggers will be developed in order to find and exploit vulnerabilities.

Here is an interesting example of a vulnerability in a TrustZone component: CVE-2016-2431. This is typically the kind of research that would fit into this internship.

This is a challenging topic on which you will work with two Quarkslab's senior vulnerability researchers who will closely advise you on your work.

Exercise

Choose a recent security advisory (less than two years) in the Android kernel or a trustlet and present a detailed analysis: root cause of the bug, exploitability, and basic code to trigger the vulnerability.

Required skills

  • Good knowledge of the ARM architecture

  • Understanding of the Linux kernel

  • Programming (C required)

  • Knowledge in reverse engineering and vulnerability research

Reference

16-internship-tz

Duration

Between 4 and 6 months.

Assess American Fuzzy Lop on Windows

This position is filled

Description

Fuzz testing (Fuzzing) is a software testing technique that consists of injecting randomized and/or mutated inputs into a program. This process is usually completely automated and provides a way to find defects in software.

American Fuzzy Lop (AFL) is a well-known security oriented Fuzz tester that brings and employs numerous novel techniques on various aspects of automated fault injection: complex algorithms to maximize target code coverage, test case reduction and triaging, corpus reduction, test case syntax analysis, etc.

The goals of this internship are to assess how AFL works (specially all the gory details) and look precisely how AFL works on Windows through its “winafl” Windows porting. We would also like to see if it is possible to reuse some parts of AFL outside its code base (i.e. test case minimizing; test case sorting; code coverage; combine it with internal tools, etc.).

During his/her internship at Quarkslab, the intern will work with a team of dedicated reverse engineers and security researchers and will learn how to assess, study and debug software, that is, bug hunting techniques.

Exercise

  • Setup AFL (on Linux) on a small codebase of your convenience.

  • Run AFL for a few hours.

  • Write a light report describing 1) relevant information on how AFL was setup and 2) how you interpret the results found by AFL.

Required skills

  • Proficiency with C language

  • Knowledge of software development (VCS, good practices, etc.)

  • Knowledge of the Windows operating system and its compilation toolchain

  • Knowledge of the Linux operating system and its compilation toolchain

  • Knowledge of fuzz testing (automatic fault injection) and bug hunting

Reference

16-internship-afl

Duration

Between 4 and 6 months.

Digging into SGX

This position is filled

Description

The new Intel® Software Guard Extensions (Intel® SGX) are an instruction set aiming at providing data and code isolation. The goal is to prevent any unauthorized access to some memory regions, in order to ensure confidentiality or integrity for instance. SGX instructions allow to create an enclave which is a user level private region of memory, providing isolation from both other userland processes but also from higher privilege levels, like the kernel.

The objective of the internship is to play with these new instructions, by designing an enclave first for the data only, then for both data and code. Then, you will try to break into that enclave, either with development flaw, logical flaw or side channel attacks. The goal would then be to either access or modify what is stored in the enclave.

Exercise

  • Build a userland memory tracer PoC (Windows, OSX or Linux).

  • Given a virtual address and a size, the PoC has to catch the access to concerned pages and associated instruction (e.g. for the PoC: catch access to Thread Environment Block / TEB).

The output of the PoC will be something like (e.g. on Windows):

(procname.exe) READ ACCESS = 0xAAAABBBBCCCCDDDD mov rbx, [rax+8] (read val = 0x12345678)
(procname.exe) WRITE ACCESS = 0xAAAABBBBCCCCDF00 mov word ptr[rax], bx (write val = 0xCAFE)

Hints:

  • Use MS Debug API to gain access to remote process and instrument it.

  • Use memory page protection attributes to capture memory accesses (set NO_ACCESS, catch memory access, restore old protection).

  • For the disassembly engine, any public library can be used.

Required skills

  • Good knowledge of the x86 architecture

  • Programming (C or C++ required)

  • Knowledge in reverse engineering and vulnerability research

Reference

16-internship-sgx

Duration

Between 4 and 6 months.

If you would like to learn more about our security audits and explore how we can help you, get in touch with us!