SELECT * requires SQL to find all the column names however this is not the biggest performance hit by a long shot.
The biggest performance hit of a SELECT * statement is when you are performing a query which requires a Nonclustered index to evaluate. Even if the nonclustered index is a covering index of every column, SQL will still look up the primary key and get the values from the clustered index.
On top of this, if you only need one or two columns, you have the network bottleneck to deal with due to returning a bigger result set than required.