Monday, 28 October 2013

Cryptolocker


Cryptolocker is a piece of ransomware that encrypts data on the infected host. Cryptolocker uses 2048-bit RSA encryption scheme which has been considered to be secure against brute force attack. In other words, there are no decryption techniques. The purpose of this malware is to hold your sensitive and confidential data as hostage with the intent to extort money for the victim. When infected, the user is asked to pay a ransom of 100-300 dollars/euros. The user is given a specified amount of time to transfer the funds, usually 72 hr. If the user does not pay, the decryption keys are deleted and the data is unrecoverable.
Cryptolocker usually disguises itself as a legitimate company email, asking the user to fill out a travel expense (or some other company form). Of course this is not a pdf but a .exe file. When cryptolocker is up and running on your system it tries to contact one of its command and control servers This server generates the encryption keys and sends it the host. Cryptolocker uses these keys to encrypt your data, it filters by file extension. Formats such as images, video or documents will be encrypted.
Currently, the security industry can only offer advice on how to avoid this infection. However, once infected even security professionals seem to agree that the best option is to pay the ransom. Ironically, people who have paid the ransom report that cryptolocker in fact does decrypt your data and remove itself from your system.

Monday, 14 October 2013

Recursion

In the previous post I talked about OOP. The main advantages of the OOP paradigm is that it offers data encapsulation and polymorphism. Data encapsulation separates interface from implementation and polymorphism lets a whole system of data behave as one. A competing language design paradigm is 'functional programing'. In this framework objects have no notion of identity or mutable state. The consequence of this last feature is heavy use of recursion. Recursion is the idea that we can solve a big problem by breaking them down into smaller, self-similar, subproblem. Therefore recursive functions take in the return value of their own return call (recursive call). Recursion is related to mathematical induction and in the most simple case a recursive needs a base case and a recursive case. Base case produces a result without recurring and recursive case divides the problem into a smaller subproblem. The base case is sometimes called the terminating case and the job of the recursive case is to breakdown the problem such that the terminating case is eventually reached and the problem is solved.

OOP

Object oriented programming allows the creation of abstract data types with data fields and methods. Data fields are attributes that describe the object and methods are functions that describe its behaviour. For example, Python is an OOP language. In python we often have to create a class of objects that represent an abstract data type. For example if we are creating a program for a car lot then we might be interested in the car class of objects. Each instance of this class might have the following attributes: model, colour, price and various technical specifications. Some of the methods might include moving the car from one dealership to another, going for a test drive or putting it in the showroom. So an object is just a collection of defining characteristics and a set of of ways we can interact with and manipulate the object. The reason why OOP is a very popular paradigm is because its meaning making process is similar to how we create and assign meaning in the natural languages. We have stronger intuition about this paradigm and it has features that make it suitable for most tasks.