Sunday, October 27, 2013

Hacking - Hackers and Crackers

Hack. A bad thing for good guys and a good thing for bad guys. Hacking a computer means gaining unauthorized access to a computer's data. As every coin has two sides, hackers can be seen from two perspectives: Hackers and Crackers. Term "Hacker" is largely misunderstood. It could mean either: Good hacker or bad hacker. Good hackers have no intention to exploit system vulnerability while bad hackers do. However, term Cracker always refers to those trying to exploit system vulnerabilities. 

Hacking into computers have been around for quite a long. In earlier days of computers, there was a little connectivity between computers around the globe. However, hacking computers over a network started as early as in 1987 exploiting vulnerabilities of a network to which computers are attached. Today, almost all devices (Laptops, Desktops, Mobiles or Tablet devices) are somehow connected to Internet and with an advancement in technologies attacks have also been improved. It is very much important that computer systems are properly secured and protects systems from at least known computer attacks.

Hackers (and not Crackers) are those who breaks in to the system for good reasons. These people are also referred to as Computer Security experts. Their aim is to identify vulnerabilities of the computer system. The system could be for example a desktop software, a website or a corporate network. Big corporations are an easy target for Crackers since gaining confidential data/information from such corporations can make their businesses loose millions of dollar. There are various techniques used by Hackers/Computer security experts to find vulnerabilities in computer networks. Some of these methods include: Penetration attacks, Vulnerability assessment, Denial of Service attacks and Social engineering attacks. 

Hackers and Crackers


Crackers (yes, those bad guys) are those who tries to exploit system vulnerabilities in a bad way. Their intentions could be anything: profit, a challenge or revenge. Breaking into a computer is not so easy task, at least today. The advancement in technology prevents breaking easily in to computer systems with known attacks till date. There are numerous number of attacks in computer history. I got a chance to understand some of the famous large scale computer attacks in CS 265 class last Fall. Those attacks were very sophisticated and exploited as many systems as they could in a little amount of time. Some attacks that I have studied includes: Password Cracking (passwords are very vulnerable for gaining computer access), Packet sniffing, Malware,  Computer viruses, Key loggers, Trojan Horse, Denial of Service attacks and Men in the Middle attack.

It can be argued that the war between Hackers (good guys) and Crackers (bad guys) can never end. No matter how computer systems get more secured, Crackers finds another way to attack computer systems. However, this also helps in a good way in which computer experts design solutions to protect systems against these unseen computer attacks. 

Based on my experience and observations, below tips will help stay protected:
1. Do not use one single password across all accounts held.
2. Try not to generate password from your personal details. 
3. Do not click random websites and immediately close such websites where content look malicious.
4. Do not install software from an untrustworthy or suspicious publisher.
5. Check for a valid SSL certificate for popular websites. (e.g Facebook, Gmail, Bank websites)
6. Try not to give personal information on each website registered.
7. Have a complex password for your online bank accounts, since you know why!

Sunday, October 13, 2013

Open Source: Why it's "Free"?

Getting something without paying a dollar - "Free" is awesome. The "Free" label attracts nearly every human being on earth, which is expected behavior.

Computers are everywhere - in engineering field, medical, education, art and communication fields to name a few. What powers computer? It's software. It's Obvious that the real power comes from hardware on top of which software runs, but for end-users it doesn't matter. The real interaction with computer happens through software. 

Building a computer software requires a language and set of other supporting tools and software.  Developers build software and there are hundreds of languages and tools that they can choose from. Now what if those tools and languages required a price to pay for using them to build a software? If that was the case today, computers would have not seen the advancement and innovation that we see today. What could be the reason? It's simple. There will be a smaller audience interested in paying for a software and using it than a larger audience willing to use it for free towards a good cause.

Open Source Software


"2 hands are better than 1". This also applies to computer software. Computer software are prone to errors and requires careful development and testing. The more number of eyes sees the source code and carries out testing, the more stable and reliable it becomes. This is exactly the case with Open Source software. 

Open Source software are licensed under "free license" and can be redistributed and are allowed to be modified/improved. The source code for the Open Source software is available to public for use and/or modification. I believe there are several advantages of making a software Open Source. I list some of them as per my opinion.

1) It improves the original release of source code and helps remove bugs and other problems.

2) People from around the world can make a contribution towards the betterment of software and helps a wider audience to connect with each other. This also promotes networking opportunity with a community for the Open Source software.

3) It provides ample of learning opportunities. Contributing in an Open Source software helps an individual learn new technologies which certainly helps towards their career growth.

4) People can get recognized for their contribution towards Open Source software.

5) It brings innovation and advancement as different minded people with different background and experience works on Open Source software.

Lastly, the most important advantage that I believe is:
Open Source software have at least the same number of functionality as their Proprietary counter part software. Most of the people requiring the use of such software do not need advanced features provided by proprietary software and only needs a number of basic features which Open Source software provides. It doesn't make sense to buy a costly proprietary software for some number of basic features. Also, if users feel the need of using advanced features, based on the experience with Open Source software they can always buy the full-featured software (which can be a closed source software).

The most successful example of keeping a software/platform Open Source is Linux. It is the best example of open source software collaboration. Other such popular platform is Android and is no doubt very popular mobile operating system around the globe.

As software program developer, I would recommend making the best out of Open Source software, both as a user and contributor. Presently, I personally am using language R (statistical analysis) and I am glad I get nearly all features of MATLAB via Open Source package R without paying a dollar (MATLAB full version costs hundred of dollars). List of Open Source software can be found here.

Sunday, October 6, 2013

Introduction to Agile Software Development

There are many software development methods or approaches in existence such as waterfall method, spiral method, incremental approach, rapid application development and iterative methods. This methods work as a framework which controls how the project is developed and maintained. There method lacks in or the other aspect of project development. With Agile software development, projects can be developed with more flexibility and pace as product releases requires faster time-to-market. 

Agile methodology is also a software development methodology/framework. It is an incremental and iterative software development approach. Agile software development is nothing but a different way of developing and maintaining software. As the name suggests, it is very flexible methodology and provides agility in many aspects of project development and maintenance. Some aspects are listed below:
1) It promotes adaptive planning
2) A time bounded iterative approach to development
3) Flexible to project requirements and changes
4) Rapid response to changing project requirement and changes

Agile development should give values or importance to below mentioned four things as referenced here:
1) Individuals and interactions over processes and tools
2) Working software over comprehensive documentations
3) Customer collaboration over contract negotiations
4) Responding to changes over following a plan

This four items, if given values/importance over their counter parts on right, will enable rapid software development.

As mentioned above, Agile software development is a framework or methodology towards software development. Many such agile methodology or framework exists: Extreme Programming (XP), Scrum and Dynamic Systems Development Method. Let us talk briefly about Scrum, which I experienced at my previous company.

Agile Software Development


Scrum is a framework built upon Agile software development principles with a focus on how to manage tasks within a team based development environment. Scrum has three core roles namely Product owner ( individual who works with customers directly and is accountable for delivery of a product ), Development team or team members ( develops the product and ships it after every sprint )  and Scrum master ( Ensure that scrum process is followed and is a facilitator for the team).

Sprint is a part of Scrum development and is time bounded. It could range between one week to one month. (Team at my previous company had two weeks per sprint). Sprint ensures that a part of product is delivered after each period(this facilitates time bounded iterative approach to development as mentioned above). Apart from periodic sprint meetings, daily scrums are held to discuss about what work was carried out the day before and what work is planned to finish the same day. Each team member typically takes a minute or two to report their daily status and may put issues/blockers faced in front of the team. Daily scrums help entire team know the status of others and how the overall project is progressing.

Some advantages of Scrum Agile development are as below:
1) Agility
2) Immediate feedback to each team members during daily scrum & sprint planning meeting
3) Issues & blockers are immediately addressed
4) Helps measure each individual's productivity
5) Time bounded development with flexibility in customer requirements
6) Defects will be identified at the earliest, as product is delivered after each sprint phase

There are various tools available in market to support Scrum framework. They can be found here.